欢迎来到天天文库
浏览记录
ID:15033627
大小:380.50 KB
页数:80页
时间:2018-08-01
《cc++语言经典、实用、趣味程序设计编程百例精解(2)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C/C++语言经典、实用、趣味程序设计编程百例精解(2)51.谁是窃贼52.黑与白53.迷语博士的难题(1)54.迷语博士的难题(2)55.哪个大夫哪天值班56.区分旅客国籍57.谁家孩子跑最慢58.拉丁方阵59.填表格60.1~9分成1:2:3的三个3位数61.1~9组成三个3位的平方数62.由8个整数形成奇特的立方体63.减式还原64.乘式还原65.乘式还原(2)66.除式还原(1)67.除式还原(2)68.九位累进可除数69.魔术师的猜牌术(1)70.魔术师的猜牌术(2)71.约瑟夫问题72.邮票组合73.和数能表示1~23的5个正
2、整数74.可称1~40磅的4块砝码75.10个小孩分糖果76.小明买书77.波松瓦酒的分酒趣题78.求π的近似值79.求π的近似值(2)80.奇数平方的一个有趣性质81.角谷猜想82.四方定理83.卡布列克常数84.尼科彻斯定理85.回文数的形成86.自动发牌87.黑白子交换88.常胜将军89.抢3090.搬山游戏91.人机猜数游戏92.人机猜数游戏(2)93.汉诺塔94.兎子产子95.将阿拉伯数字转换为罗马数字96.选美比赛97.满足特异条件的数列98.八皇后问题99.超长正整数的加法100.数字移动51.谁是窃贼公安人员审问四名窃贼嫌
3、疑犯。已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的。在回答公安人员的问题中:甲说:“乙没有偷,是丁偷的。”乙说:“我没有偷,是丙便的。”丙说:“甲没有偷,是乙偷的。”丁说:“我没有偷。”请根据这四人的答话判断谁是盗窃者。*问题分析与算法设计假设A、B、C、D分别代表四个人,变量的值为1代表该人是窃贼。由题目已知:四人中仅有一名是窃贼,且这四个人中的每个人要么说真话,要么说假话,而由于甲、乙、丙三人都说了两句话:“X没偷,X偷了”,故不论该人是否说谎,他提到的两人中必有一人是小偷。故在列条件表达式时,可以不
4、关心谁说谎,谁说实话。这样,可以列出下列条件表达式:甲说:”乙没有偷,是丁偷的。”B+D=1乙说:“我没有偷,是丙偷有。”B+C=1丙说:“甲没有偷,是乙偷的。”A+B=1丁说:“我没有偷。”A+B+C+D=1其中丁只说了一句话,无法判定其真假,表达式反映了四人中仅有一名是窃贼的条件。*程序说明与注释#includeintmain(){inti,j,a[4];for(i=0;i<4;i++)/*假定只有第i个人为窃贼*/{for(j=0;j<4;j++)/*将第i个人设置为1表示窃贼,其余为0*/if(j==i)a[j]
5、=1;elsea[j]=0;if(a[3]+a[1]==1&&a[1]+a[2]==1&&a[0]+a[1]==1)/*判断条件是否成立*/{printf("Thethiefis");/*成立*/for(j=0;j<=3;j++)/*输出计算结果*/if(a[j])printf("%c.",j+'A');printf("");}}}*运行结果ThethiefisB.(乙为窃贼。)52.黑与白有A、B、C、D、E五人,每人额头上都帖了一张黑或白的纸。五人对坐,每人都可以看到其它人额头上的纸的颜色。五人相互观察后,A说:“我看见有三人额头
6、上帖的是白纸,一人额头上帖的是黑纸。”B说:“我看见其它四人额头上帖的都是黑纸。”C说:“我看见一人额头上帖的是白纸,其它三人额头上帖的是黑纸。”D说:“我看见四人额头上帖的都是白纸。”E什么也没说。现在已知额头上帖黑纸的人说的都是谎话,额头帖白纸的人说的都是实话。问这五人谁的额头是帖白纸,谁的额头是帖黑纸?*问题分析与算法设计假如变量A、B、C、D、E表示每个人额头上所帖纸的颜色,0代表是黑色,1代表是白色。根据题目中A、B、C、D四人所说的话可以总结出下列关系:A说:a&&b+c+d+e==3
7、
8、!a&&b+c+d+e!=3B说:b&
9、&a+c+d+e==0
10、
11、!b&&a+c+d+e!=0C说:c&&a+b+d+e==1
12、
13、!c&&a+b+d+e!=1D说:d&&a+b+c+e==4
14、
15、!d&&a+b+c+e!=4穷举每个人额头所帖纸的颜色的所有可能的情况,代入上述表达式中进行推理运算,使上述表达式为“真”的情况就是正确的结果。*程序说明与注释#includeintmain(){inta,b,c,d,e;for(a=0;a<=1;a++)/*黑色:0白色:1*/for(b=0;b<=1;b++)/*穷举五个人额头帖纸的全部可能*/for(c=0;c<=
16、1;c++)for(d=0;d<=1;d++)for(e=0;e<=1;e++)if((a&&b+c+d+e==3
17、
18、!a&&b+c+d+e!=3)&&(b&&a+c+d+e==0
19、
20、!b&&
此文档下载收益归作者所有