《C语言及程序设计》实践项目——穷举法解题

返回:贺老师课程教学链接

说明:穷举法在有些时候,并不是一种最有效率的解决方案,但却是最直观的。初学者依靠这一组问题的解决,将获得程序设计的最直接体验,以及会想问题的头脑。


【项目1-小明借书】
小明有五本新书,要借给A,B,C三位小朋友,若每人每次只能借一本,则可以有多少种不同的借法?
提示:本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法。假设三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。
[参考解答]


【项目2-水仙花数】
对于三位数字,若各位数字立方和等于该数,该数就是水仙花数。如153:153=13+53+33
[参考解答]


【项目3-鸡兔共笼】
鸡兔共有30只,脚共有90只,问鸡兔各有多少?
[参考解答]


【项目4-换分币】
用一元人民币兑换成1分、2分和5分硬币,有多少种不同的兑换方法?请输出所有可能的方案。
提示:根据题意设i,j,k分别为兑换的1分、2分、5分硬币的枚数,则i,j,k的值应满足:i+j*2+k*5=100,根据取值范围构造循环解题即可。
[参考解答]


【项目5-年龄几何】
张三、李四、王五、刘六的年龄成一等差数列,他们四人的年龄相加是26,相乘是880,求以他们的年龄为前4项的等差数列的前20项。
提示:设数列的首项为n,公差为a,则前4项之和为"4*n+6*a",前4 项之积为"n*(n+a)*(n+a+a)*(n+a+a+a)"。同时"1<=a<=4","1<=n<=6"。可采用穷举法求出此数列。
[参考解答]


【项目6-三色球问题】
若一个口袋中放有12个球,其中有3个红的。3个白的和6个黒的,问从中任取8个共有多少种不同的颜色搭配?
提示:设任取的红球个数为i,白球个数为j,则黒球个数为8-i-j,根据题意红球和白球个数的取值范围是0~3,在红球和白球个数确定的条件下,黒球个数取值应为8-i-j<=6。
[参考解答]

【项目7-找数字】
(1)求满足下式的 x,y,z

          x y z
       +  y z z
     ──────
          5 3 2 

请补充完整下面的程序:

#include <stdio.h>
int main()
{
    int x,y,z,i,result=532;
    for (x=1;___(1)___; x++)
        for (y=1; ___(2)___; y++)
            for ( ___(3)___;___(4)___; z++)
            {
                i=___(5)___+(100*y+10*z+z);
                if (i==result)  
                    printf("x=%d, y=%d, z=%d\n",x,y,z);
            }
    return 0;
}
(2)在下面的加法算式中,不同的符号代表不同的数字,相同的符号代表相同的数字。请设计程序求出"都、要、学、C"4个符号分别代表的数字。
              C  
          学  C  
      要  学  C  
+ 都  要  学  C  
________________  
  2   0   0   8 
提示:让计算机解奥数题。穷举"都、要、学、C"4个符号分别代表的数字(从0到9),然后进行组合,如果组合起来符合规则(不同的符号代表不同的数字,相同的符号代表相同的数字,且使等式成立),则为正解。
[ 参考解答]


【项目8-谁是小偷】
警察局抓住了A、B、C、D四名盗窃嫌疑犯,其中只有一人是小偷。在审问时,A说:“我不是小偷”;B说:“C是小偷”;C说:“小偷肯定是D”;D说:“C在冤枉好人”。现在已经知道这四人中有三人说的是真话,一人说的是假话。请问到底谁是小偷?
提示:设4个变量a,b,c,d,为0时表示不是小偷,为1时表示是小偷,用四重循环穷举a,b,c,d可能的取值的组合,对每一种组合判断其是否符合题目中给出的约束。最后结论:C是小偷。
[ 参考解答]


【项目9-污损的单据】
(1)有等式[※×(※3+※)]2=8※※9,其中※处为1个数字,滴上了墨水无法辨认。请编程找出※表示哪个数字。
(2)有等式[※×(※3○※)]2=8※※9,其中※处为1个数字,○处为+、-、×、÷四个运算符之一,现滴上了墨水无法辨认。请编程找出※表示哪个数字,○表示哪个运算符。
[ 参考解答]




你可能感兴趣的:(《C语言及程序设计》实践项目——穷举法解题)