1、正整数序列Q中的每个元素都至少能被正整数a和b中的一个整除,现给定a和b,需要计算出Q中的前几项,例如,当a=3,b=5,N=6时,序列为3,5,6,9,10,12
(1)、设计一个函数void generate(int a,int b,int N ,int * Q)计算Q的前几项
(2)、设计测试数据来验证函数程序在各种输入下的正确性。
C++实现:
#include<iostream> using namespacestd; void generate(int a,int b,int N,int *Q) { int qa=1; int qb=1; int index=0; while(index<N) { if(a*qa<b*qb) { Q[index++]=a*qa; qa++; } else if(a*qa>b*qb) { Q[index++]=b*qb; qb++; } else { Q[index++]=a*qa; qa++; qb++; } } } intmain() { int *Q=new int[11]; generate(3,5,10,Q); for(int i=0;i<10;++i) cout<<Q[i]<<' '; cout<<endl; }
变形,如果只包含数a和b,实现代码:
#include<iostream> using namespacestd; void generate(int a,int b,int N,int *Q) { if(Q==NULL) return; int index=1; Q[0]=1; int *qa=Q; int *qb=Q; while(index<=N+1) { int minvalue=min(*qa*a,*qb*b); Q[index]=minvalue; while(*qa*a<=minvalue) qa++; while(*qb*b<=minvalue) qb++; ++index; } } intmain() { int *Q=new int[11]; generate(3,5,10,Q); for(int i=1;i<11;++i) cout<<Q[i]<<' '; cout<<endl; }
2、有一个由大小写组成的字符串,现在需要对他进行修改,将其中的所有小写字母排在答谢字母的前面(大写或小写字母之间不要求保持原来次序),如有可能尽量选择时间和空间效率高的算法 c语言函数原型void proc(char *str) 也可以采用你自己熟悉的语言。
#include<iostream> #include<cstring> #include<ctype.h> using namespacestd; void swap(char *a,char *b) { char c=*a; *a=*b; *b=c; } void proc(char *str) { if(str==NULL) return; int n=strlen(str); int i=0,j=n-1; while(i<j) { while(i<j&&islower(str[i])) ++i; while(i<j&&isupper(str[j])) --j; if(i<j) swap(&str[i],&str[j]); } } intmain() { char ch[]="AHdfhIKhhGkGE"; proc(ch); cout<<ch<<endl; }
3、如何随机选取1000个关键字?
给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?
http://www.xuebuyuan.com/551780.html
http://ask.julyedu.com/question/447