1、 %dn, n); /* 判断反序数是否是原整数的9倍若是则输出 */2-3. 口袋中有12个球,其中3红,3白和6黑,从中任取8个球,编程,输出所有不同的取法。 No. RED WHITE BLACK - 1: 0 2 6 2: 0 3 5 。 13: 3 3 2 设任取红球的个数为i,白球的个数为j,黑球的个数为k, 据题意红球和白球个数的取值范围是03,黑球的取值范围是06。所以用三重循环穷举红球、白球、黑球可能的值,输出满足条件(总数为8个球)的取法。因为总数为8个球,所以黑球的个数为8-i-j(=6),故可以省略k循环。 main()/*sj1-2-3 */ int i,j,coun
2、t=0; No. RED WHITE BLACK n);-n for(i=0;i=3;i+) /* 循环控制变量i控制任取红球个数03 */ for(j=0;jj+) /* 循环控制变量j控制任取白球个数03 */ if(8-i-j)=6)%2d: %d %d %dn,+count, i,j,8-i-j);2-4. 小明有五本不同的新书,要借给A、B、C三位小朋友,每人每次只能借一本,编程,输出所有不同的借法。No. A B C 1 1 2 3 2 1 2 4 60 5 4 3设5本书分别命名为1、2、3、4、5,A、B、C可以任取一本书,所以可以用A、B、C三重循环,取值范围:从1到5。A、
3、B、C所借书互不相同(a!=b&a!=c&b!=c)。 main()/*sj1-2-4 */ int a,b,c,n=0; No. A B C n-n=5;a+) /* 循环变量a控制任取书15 */for(b=1;b+) /* 循环变量b控制任取书15 */ if(a=b) continue;for(c=1;c+) /* 循环变量c控制任取书15 */ if(a!=c) ,+n,a,b,c);2-5. 编程,求全部水仙花数。所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。如:153 = 13 + 53+ 33153、370、371、407对三位数i循环(i=100999),将i的各位
4、数字分解为a,b,c后,输出满足i=a3+b3+c3的i。n位数i的各位数字(从高位到低位)分解方法: i/k%10; k=10n-1,10n-2,,102,10,1 main()/*sj1-2-5 */ int i,a,b,c; for(i=100;1000;i+) /* 穷举要判定的数i的取值范围100999 */ a=i/100; /* 截取整数i的百位数字 */b=i/10%10; /* 截取整数i的十位数字 */c=i%10; /* 截取整数i的个位数字 */ if(a*a*a+b*b*b+c*c*c =i) %d ,i); /* 若i是水仙花数,则输出*/2-6. 100匹马驮10
5、0担货,大马一匹驮担,中马一匹驮担,小马两匹驮担。编程,输出所有满足条件的方案(即大、中、小马的数目)。 1: l= 2 m=30 s=68 2: l= 5 m=25 s=70 3: l= 8 m=20 s=72 4: l=11 m=15 s=74 5: l=14 m=10 s=76 6: l=17 m= 5 s=78 7: l=20 m= 0 s=80大马l一匹驮担,它至多l=100/3=33匹;中马m至多m=(100-3*l)/2匹;小马s=(100-l-m) 匹 . 可以用l、m两重循环(l=033,m=0(100-3*l)/2),输出满足3l+2m+s/2=100(s是2的倍数)的l、
6、m、s。 main()/*sj1-2-6 */ int l,m,s,j=0; for(l=0; l=33; l+) for(m=0; m5: 0 2: 0 1: 100No. 2 1 1: 98No。541 20 2: 0设f5,f2,f1分别表示5分、2分和1分的个数, f5=20,f2=(100-f5*5)/2;f1=100-f5*5-f2*2。可以用f5、f2两重循环(f5=020,f2=0(100-f5*5)/2),输出所有不同的兑换方法.至于兑换方法个数可以设变量n计数并输出即可。main()/*sj1-2-7 */ int f1,f2,f5,count=0; for(f5=0;f5
7、=20;f5+) for(f2=0;f2 5: %4d 2: %2d 1: %2dn,+count,f5,f2,f1);2-8. 编程,从键盘输入1个人的工资(10009999之间的整数),计算给这个人发工资时,需面值100元,50元,20元,10元,5元,2元和1元的人民币各多少张?输出总张数最少的10种方案。输入2310no. 100 50 20 10 5 2 11 23 0 0 1 0 0 02 23 0 0 0 2 0 03 23 0 0 0 1 2 14 23 0 0 0 1 1 35 23 0 0 0 1 0 56 23 0 0 0 0 5 07 23 0 0 0 0 4 28 2
8、3 0 0 0 0 3 49 23 0 0 0 0 2 610 23 0 0 0 0 1 8设工资为n,100元至多为f100=n/100张,50元至多为f50=(n-f100*100)/50张20元至多为f20=(n-f100*100-f50*50)/20张10元至多为f10=(n-f100*100-f50*50-f20*20)/10张。5元至多为f5=(n-f100*100-f50*50-f20*20-f10*10)/5张。2元至多为f2=(n-f100*100-f50*50-f20*20-f10*10-f5*5)/2张。1元至多为f1=(n-f100*100-f50*50-f20*20-
9、f10*10-f5*5-f2*2)张。大面值人民币用得越多,总张数越少,因此用f100,f50,f1共7重循环(各面值张数从大到小循环,如:f100=n/1001)。输出前10个满足条件(工资=fi)的面值组合。main()/*sj1-2-8 */ int n,f1,f2,f5,f10,f20,f50,f100,count=0; scanf(“%d”,&n); printf(“no. 100 50 20 10 5 2 1n”) for(f100= n/100;f100=0;f100-) for(f50=(n-f100*100)/50;f50f50-) for(f20=(n-f100*100-f
10、50*50)/20;f20f20-) for(f10=(n-f100*100-f50*50-f20*20)/10;f10f10-)for(f5=(n-f100*100-f50*50-f20*20-f10*10)/5;f5f5-) for(f2=(n-f100*100-f50*50-f20*20-f10*10-f5*5)/2;f2f2-) f1=n-f100*100-f50*50-f20*20-f10*10-f5*5-f2*2; if(n=f100*100+f50*50+f20*20+f10*10+f5*5+f2*2+f1)%2d %6d%6d%6d%6d%6d%6d%6dn,+count,f1
11、00,f50,f20,f10,f5,f2,f1);2-9. 编程,输出555555的约数中最大的三位数。 777对三位数j循环(j=999100),输出首次能整除555555的j(最大约数)。 main( ) /*sj1-2-9 */ int j; long n; /* 使用长整型变量,以免超出整数的表示范围 */Please input number: scanf(%ld, & for(j=999;j=100;j-)/* 可能的取值范围在999到100之间,j从大到小 */ if(n%j = 0 ) /* 若能够整除j,则j是约数,输出结果 */ printf(The max factor
12、with 3 digits in %ld is: %d.n,n,j); break; /* 控制退出循环 */ if(j100) printf(%ld has not factor with 3 digitsn,n);2-10. 编程,输出所有个位数为6且能被31整除的五位数及其个数。No. 1 10106No. 2 10416No. 289 99386No. 290 99696对5位数n循环1000099999,输出满足条件n%10=6&n%31=0的所有n. main( ) /*sj1-2-10 */ long n,j=0; for(n=10000;n=99999;n+)/*取值范围在10
13、000到99999之间*/ if(n%10=6&n%31=0 ) /* 个位数为6且能被31整除 */No.%ld %ld n,+j,n);2-11. 一辆卡车违犯交通规则,撞人逃跑。现场三人目击事件,但都没记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索,编程,输出车号。7744用两重循环构造一个前两位数相同、后两位数相同且相互间又不同的整数i*1000+i*100+j*10+j,(其中i=19,j=09),然后再用循环(c=3199,c的平方为4位数)判断该整数是否是c的平方。m
14、ain()/*sj1-2-11 */ int i,j,k,c; for(i=1;=9;i+) /* i:车号前二位的取值 */j+) /* j:车号后二位的取值 */ if( i!=j ) /* 判断两位数字是否相异 */ k=i*1000+i*100+j*10+j; /* 计算出可能的整数 */ for( c=31;100;c+) /* 3199的平方为4位数*/ if(c*c=k)Lorry_No. is %d .n, k); /* 若是,打印结果 */2-12. 中国古代数学家张丘建在他的算经中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、
15、母、雏各几何? 编程,输出所有可能的购买方案。No. a b c1 0 25 752 4 18 783 8 11 814 12 4 84 设鸡翁a只,鸡母b只,鸡雏c只,则a+b+c=100,且5a+3b+ c /3 =100,即15a+9b+c=300, 鸡翁至多买100/5=20只,鸡母至多买100/3=33,鸡雏买100-a-b只。用两重循环(a=020,b=033)输出满足条件a+b+c=100和15*a+9*b+c=300的所有购买方案。main()/*sj1-2-12 */ int a,b,c,n=0;No. a b cn for(a=0;a+) /*鸡翁只数取值 */ for(b
16、=0;b+) /*鸡母只数取值 */ c=100-a-b; /* 计算出鸡雏的只数 */ if(15*a+9*b+c=300)%2d %d %d %dn, +n,a,b,c); /*打印结果 */2-13. 编程,输出1000到100000之间所有满足下列条件的所有整数及其个数:整数的各位数字之和等于5。 1 10042 10133 10224 1031103 40100104 41000105 50000对i循环(i=1000100000),将i的各位数字分解为a,b,c,d,e,f后,输出满足各位数字之和等于5的i。 main()/*sj1-2-13 */ long i,a,b,c,d,e
17、,f,n=0; for(i=1000;=100000; a=i/100000;b=i/10000%10;c=i/1000%10;d=i/100%10e=i/10%10;f=i%10; if(a+b+c+d+e+f =5)%3ld %ldn,+n,i); /* 若i满足要求,则输出*/2-14. 编程,任意输入一个偶数n,请将它分解为两个素数之和。输出形式为:*=*+* 输入248,输出248=7+241。输入561,无输出对j=2,3,n-1循环,则n为j和m=n-j之和,若j、m均是素数则输出。 main()/*sj1-2-14 */ int j,k,n,m;Please enter n:%
18、d,& for(j=2;n;j+) /* 穷举法分解n为两个素数j和m之和 */ for(k=2;k=j) /* j是素数 */ m=n-j; for(k=2;m;k+) /* 检验m是否素数 */ if(m%k=0) break; if(k=m) /* m也是素数,输出结果 */ printf(%d = %d + %dn,n,j,m);2-15. 有一正整数等差数列,其前四项之和是26,前四项之积是880,编程,输出此数列的前四项。2 5 8 11对a=1,2,循环,对每个a,依次令公差k=1,2,输出满足下列条件的a,b=a+k,c=a+2k,d=a+3k : a+b+c+d=26 & a
19、*b*b*d=880 main()/*sj1-2-15 */ int a=1,b,c,d,f=0,k=1; while(1) k=1; b=a+k; c=b+k; d=c+k; if(a+b+c+d26|a*b*c*d880)/* 肯定不能满足*/ printf(not found!nbreak; while(1) /* 以不同的公差试探 */ if(a+b+c+d880) break;/* 不可能满足*/ if(a+b+c+d=26&a*b*c*d=880)/* 找到 */%5d%5d%5d%5dn,a,b,c,d);f=1; k+; if(f=1) break; a+;2-16. 一个自然
20、数被除余,所得的商被除也余,再将第二次的商被除后余,最后得到一个商为。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是的倍。编程,输出这个自然数。1993对自然数1,2,。搜索满足下列条件的数K:对n=k/8;b=n/8;a=b/8;满足k%8=1&n%8=1&b%8=7,对c=k/17;d=n/17; 满足(k%17=4& c%17=15&2*a=d)main()/*sj1-2-16 */ int n,b,a,k=0; while(+k) n=k/8; if(k%8!=1|n%8!=1|b%8!=7) continue; n=k/17;b=n/17; if(k%17!=4
21、|n%17!=15) continue; if(2*a=b) printf(k=%dn,k);2-17. 如果一个数恰好等于它的因子之和,则称该数为“完全数”。6的因子是1、2、3,而6123,则是个“完全数”。编程,输出1000以内的全部“完全数”。 1+2+3=6。 1+2+4+7+14=28 1+2+4+8+16+31+62+124+248=496对i循环(i=11000),输出满足条件的i及其各因子(用a数组记录)。main()/*sj1-2-17 */ int i,j,m,s,k,a100;=1000;i+) /* 寻找1000以内的完全数 */ m=i;s=0;k=0; for(j
22、=1;j+) if(m%j=0) s=s+j; ak+=j; if(i=s) /* I为各因子之和,输出 */ for(j=0;k;%d+,aj);b=%dn2-18. 一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,编程,输出这个三位数。248 (248=(503)7,248=(305)9)3位7进制数的范围:(100)7 =49,(666)7 =342,3位9进制数的范围:(100)9 =81,(888)9 =728所以81342的7、9进制数均为3位数。对i循环(i=81342),计算i 的7、9进制数,输出它们数码顺序正好
23、相反的i。 main() /*sj1-2-18 */ int i,n,k,a3,b3; for(i=81;=342;i+) for(n=i,k=0;n0;n/=7) /* 化为7进制并存放到a */ ak+=n%7; for(n=i,k=0;n/=9) /* 化为9进制并存放到b */ bk+=n%9; for(n=0;n+)/* 检查两个三位数的数码顺序是否相反*/ if(an!=bk-n-1) break;/* 非反序,nk */ if(n=k) /* 反序,n=k */%dn2-19用40元买苹果、西瓜和梨共100个,3种水果都要。已知苹果0.4元一个,西瓜4元一个,梨0.2元一个。问可以各买多少个?编程,输出全部购买方案。设西瓜买x个,苹果买y个,梨买z个,则问题满足方程: 4x+0.4y+0.2z=40 x+y+z=100即: 40x+4y+2z=400西瓜至多买(40-0.4-0.2)/4=9 个, 苹果至多买 (40-4-
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1