C语言上机考题分析2

  • 格式:doc
  • 大小:76.50 KB
  • 文档页数:13

穷举法求解简单计算问题根据问题的已知条件,对影响答案的各种因素可能的取值范围进行组合,在所有可能的组合情况中输出满足条件的答案。

一般,影响答案的各种因素作为循环变量,用多重循环对各种因素进行组合,在内层循环中验证每种组合并输出满足条件的答案。

2-1. 编程,输出200以内(含200)所有完全平方数C(满足C2=A2+B2)及其个数。

结果:254个C:No. C A B1 5 3 42 5 4 33 10 6 84 10 8 65 13 5 126 13 12 5…………251 200 56 192252 200 120 160253 200 160 120254 200 192 56分析:影响答案的因素有A、B、C,它们的取值范围均为1~200。

所以用三重循环穷举A、B、C可能的值,输出满足条件C2=A2+B2的C、A、B及C的个数。

C的个数可以设变量n计数并输出即可。

n=0;for(c=1;c<=200;c++)for(a=1;a<=200;a++)for(b=1;b<=200;b++)if(c*c==a*a+b*b)printf("No.%3ld:%ld %ld %ld\n",++n,c, a, b);2-2. 口袋中有12个球,其中3红,3白和6黑,从中任取8个球,编程,输出所有不同的取法。

结果:No. RED WHITE BLACK------------------------1: 0 2 62: 0 3 53: 1 1 6。

12: 3 2 313: 3 3 2分析:设任取红球的个数为i,白球的个数为j,黑球的个数为k,据题意红球和白球个数的取值范围是0~3,黑球的取值范围是0~6。

所以用三重循环穷举红球、白球、黑球可能的值,输出满足条件(总数为8个球)的取法。

因为总数为8个球,所以黑球的个数为8-i-j(<=6),故可以省略k循环。

2-3. 小明有五本不同的新书(分别命名为1,2,3,4,5),要借给A、B、C三位小朋友,每人每次必须借一本,编程,输出所有不同的借法。

结果:No. A B C1 12 32 1 2 4… …59 5 4 260 5 4 3分析:设5本书分别命名为1、2、3、4、5,A、B、C可以任取一本书,所以可以用A、B、C三重循环,取值范围:从1到5。

A、B、C所借书互不相同(a!=b&&a!=c&&b!=c)。

2-4. 100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马两匹驮1担。

编程,输出所有满足条件的方案(即大、中、小马的数目)。

结果:1: l= 2 m=30 s=682: l= 5 m=25 s=703: l= 8 m=20 s=724: l=11 m=15 s=745: l=14 m=10 s=766: l=17 m= 5 s=787: l=20 m= 0 s=80分析:大马l一匹驮3担,至多l=100/3=33匹;中马m至多m=(100-3*l)/2匹;小马s=(100-l-m) 匹 . 可以用l、m两重循环(l=0~33,m=0~(100-3*l)/2),输出满足3l+2m+s/2=100(s是2的倍数)的l、m、s。

2-5. 编程,输出所有个位数为6且能被31整除的五位数及其个数。

结果:No. 1 10106No. 2 10416No. 3 10726No. 4 11036……No. 288 99076No. 289 99386No. 290 99696分析:对5位数n循环10000~99999,输出满足条件n%10==6&&n%31==0的所有n.2-6. 一辆卡车违犯交通规则,撞人逃跑。

现场三人目击事件,但都没记住车号,只记下车号的一些特征。

甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的;丙是位数学家,他说:四位的车号刚好是一个整数的平方。

根据以上线索,编程,输出车号。

结果:7744分析:用两重循环构造一个前两位数相同、后两位数相同整数i*1000+i*100+j*10+j,(其中i=1~9,j=0~9),然后再用循环(c=31~99,c的平方为4位数)判断该整数是否是c的平方。

2-7. 中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何? 编程,输出所有可能的购买方案。

结果: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=0~20,b=0~33)输出满足条件a+b+c==100和15*a+9*b+c==300的所有购买方案。

2-8.用40元买苹果、西瓜和梨共100个,3种水果都要。

已知苹果0.4元一个,西瓜4元一个,梨0.2元一个。

问可以各买多少个?编程,输出全部购买方案。

分析:设西瓜买x个,苹果买y个,梨买z个,则问题满足方程:4x+0.4y+0.2z=40x+y+z=100即: 40x+4y+2z=400x+y+z=100西瓜至多买(40-0.4-0.2)/4=9 个, 苹果至多买(40-4-0.2)/0.4=89 个,梨买100-y-z个.用两重循环(x=1~9,y=1~89)输出满足条件x+y+z =100和40x+4y+2z=400的所有购买方案。

.输出结果:x y z------------------------1 81 182 62 363 43 544 24 725 5 902-9.我国明代数学家程大位写了一本《算法统宗》,里面有一题:一百馒头一百僧,大僧三个,小僧三人分一个,大小僧各几丁?编程,输出大僧和小僧的人数。

结果:x= 25 y= 75分析:设大僧有x个,小僧有y个,则满足方程组:x+y=1003x+y/3=100 即9x+y=300x<=100/3,y=100-x用循环(x=0~33)输出满足条件x+y=100和9x+y=300的所有方案。

2-10.一个马戏团表演, 120个座位全满,全部门票收入是120元,现在知道,男人每人5元,女人每人2元,小孩每人1角。

编程,输出男人、女人和小孩各有多少人。

结果:x y z--------------17 13 90分析:设男人有x人, 女人有y人, 小孩有z人,则问题满足方程:5x+2y+0.1z=120 即50x+20y+z=1200x+y+z=120男人至多有120/5=24人, 女人至多有120/2=60人,小孩有(120-x-y)人, 用二重循环(x=0~24,y=0~60)输出满足条件x+y=120和50x+20y+z=1200的所有方案。

2-11. 设N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),编程,输出所有满足条件的N。

结果:1089分析:对4位数x循环(x=1000~9999)将x的千、百、十、个位数字依次分解为i、j、k、m后,输出满足下列条件的x:x*9=(m*103+k*102+10*j+i)。

也可以令i、j、k、m分别表示x的千、百、十、个位数字,用4重循环(i=1~9,j、k、m=0~9),输出满足下列条件的x=(i*103+j*102+10k+m): x*9=(m*103+k*102+10j+i)n位数x的各位数字(从高位到低位)分解方法:x/k%10; k=10n-1,10n-2,…,102,10,12-12. 编程,求全部水仙花数。

所谓水仙花数是指一个三位数,其各位数字立方的和等于该数。

如:153 = 13 + 53+ 33结果:153、370、371、407分析:对三位数i循环(i=100~999),将i的各位数字分解为a,b,c 后,输出满足i=a3+b3+c3的i。

2-13. 用一元人民币兑换成1分、2分和5分硬币,编程,输出所有不同的兑换方法及兑换方法个数。

结果 No. 1>>5: 0 2: 0 1: 100No. 2>>5: 0 2: 1 1: 98No. 3>>5: 0 2: 2 1: 96……No。

540>>5: 19 2: 2 1: 1No。

541>>5: 20 2: 0 1: 0分析:设f5,f2,f1分别表示5分、2分和1分的个数, f5<=20,f2<=(100-f5*5)/2;f1<=100-f5*5-f2*2。

可以用f5、f2两重循环(f5=0~20,f2=0~(100-f5*5)/2),输出所有不同的兑换方法.至于兑换方法个数可以设变量n计数并输出即可。

2-14. 编程,从键盘输入1个人的工资(1000—9999之间的整数),计算给这个人发工资时,需面值100元,50元,20元,10元,5元,2元和1元的人民币各多少张?输出尽可能使用大面值人民币的10种方案。

结果:输入2310输出:no. 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 23 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-f10*10-f5*5-f2*2)张。

因为要求尽可能使用大面值人民币,所以用f100,f50,…,f1共7重循环(各面值张数从大到小循环,如:f100=n/100~0)。

输出前10个满足条件(工资=∑fi)的面值组合。

2-15. 编程,输出555555的约数中最大的三位数。

结果: 777分析:对三位数j循环(j=999~100),输出首次能整除555555的j(最大约数)。