概述
均采用C++通过。
1、子序列的和,多组数据输入 n< m<10^6,输出1/n^2+1/(n+1)^2+…+1/m^2,结束标记为m=n=0
void subsequence(){
long n[5],m[5]; int k,i,j; //控制输入,这儿最多输入5组数据,学艺不精啊 for(k = 0;k<5;k++){ scanf("%ld%ld",&n[k],&m[k]); if(! (n[k]) && ! (m[k]) ) break; } //计算相应值,但注意超出范围。 for(i =0;i<k;i++){ long double sum = 0; for(j = n[i];j<=m[i];j++){ sum += 1.0/(long double)(j*j); } printf("%.5lfn",sum); }
}
2、将1,2…9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出,输出所有满足条件的数
void choise(int *a,int n){
int i,j,k,temp; for(i=0;i<n-1;i++) { k=i; //给记号赋值 for(j=i+1;j<n;j++) if(a[k]>a[j]) k=j; //是k总是指向最小元素 if(i!=k) { //当k!=i是才交换,否则a[i ] 即为最小 temp=a[i]; a[i]=a[k]; a[k]=temp; } }
}
void permutation(){
//分析得最小一个组合的数的取值范围为123到333,看的网上的,我可没有分析出来啊。智商不够 //用[m9]来装a,b,c得到数据 int m[9]; int copy,flag = 1;//flag 相等标记 for(int a=123; a<=333; a++){ int b = 2*a; int c = 3*a; //将abc个位,十位,百位分出来,这儿是倒序,不影响 for(int k= 0;k<3;k++){ switch(k) { case 0: copy =a;break; case 1: copy =b;break; case 2: copy =c;break; } for(int i=0;i<3;i++){ if(i) copy = copy / 10; m[i+3*k] = copy%10; } } //排序,这儿可以不排序,直接看有没有相等 choise(&m[0],9); //判断是否相等 for(int n= 0;n<8;n++){ if(m[n]== m[n+1]|| !m[n]) flag =0; } if(flag) printf("%d %d %dn",a,b,c); flag = 1; }
}
3、有编号1~n个灯泡,起初所有的灯都是灭的。有k个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。
现在开始按开关。
第1个同学,把所有的灯泡开关都按一次(按开关灯的编号: 1,2,3,……n)。
第2个同学,隔一个灯按一次(按开关灯的编号: 2,4,6,……)。
第3个同学,隔两个灯按一次(按开关灯的编号: 3,6,9,……)。求最后亮着的灯,输入n,k
如输入7 3,输出1 5 6 7void switch_light(){
for(int l = 0;l<1010;l++) a[l] = 1; //memset(a,1,sizeof(a));//将编号全赋值为0,1表示开灯,-1表示关灯 int n,k;//n<=k<=1000 scanf("%d%d",&n,&k); for(int i =2;i<=k;i++){ //i控制第几个人 for(int j=1;j<=n;j++){ //j控制灯开关 if(j*i>n)break; a[j*i] =a[j*i] *(-1); } } for(int m = 1;m<=n;m++){ if(a[m]==1) printf("%dt",m); }
}
最后
以上就是兴奋彩虹为你收集整理的算法学习系列2.1的全部内容,希望文章能够帮你解决算法学习系列2.1所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复