1、C 语言逻辑推理例题(多重循环)例 1 明明找不到铅笔盒了,妈妈对他说:“我把铅笔盒放到三个抽屉中的一个抽屉里了,每个抽屉上都写了一句话。不过,其中只有一句话是真的。 ”明明看到的三句话是:左边抽屉:“铅笔盒不在这里” ;中间抽屉:“铅笔盒不在这里” ;右边抽屉:“铅笔盒在左边的抽屉” ;例 2 甲、乙、丙、丁四人参加一次数学竞赛。赛后,他们四人预测名次的谈话如下:甲说:“丙得第一,我第三名” ;乙说:“我第一名,丁第四名”丙说:“丁第二名,我第三名”丁没说话。当最后结果公布时发现,甲乙丙都只说对了一半,请给出正确的四人名次。例 3 一位法官在审理一起盗窃案时,对涉及到的四名嫌疑犯 A、B、C
2、、D 进行了审问。四人分别供述如下:A:“罪犯在 B、C、D 三人之中。 ”B:“我没有作案,是 C 偷的。 ”C: “在 A 和 D 中间有一个是罪犯。 ”D:“B 说的是事实 ”经过充分的调查,证实四人中只有两人说了真话,并且罪犯只有一个。请确定真正的罪犯。参考答案:(1)#include#includemain()short a,b,c,d,l1,l2,l3,l4;for(a=0;a#includemain()short a,b,c,d,j,t; for(j=0;j3;b=(jc=(jd=jt=(b+c+d=1)+(!bif(t=2system(“pause“);习题1、 小狗、小兔、小
3、猫、小猴和小鹿参加百米赛跑,比赛结束后,小猴说:“我比小猫跑得快。 ”小狗说:“小鹿在我的前面冲过了终点线。 ”小兔说:“我的名次排在小猴的前面,小狗的后面。 ”请根据他们的回答排出名次。参考答案:#include#includemain()short a,b,c,d,e,l1,l2,l3; /*a,b,c,d,e 分别代表小狗,小兔,小猫,小猴,小鹿*/for(a=1;a#includemain()short y,o,f,m,d,l1,l2,l3,l4,l5;/*y,o,f,m,d 分别是亚洲,欧洲,非洲,美洲和大洋洲的首字母*/for(y=1;y#includemain()short a,
4、b,c,l1,l2;for(a=1;a=2;int t6=(x2+x6=0)|(x2+x6=2);int t7=x2+x4+x6+x80)|x7=1;return t1 运行结果:参考程序:#include “stdio.h“void show(int *x) int i;for(i=0;i0)printf(“%c“,i+A);printf(“n“);int judge(int *x)int t1=x0=0 |x1=1;int t2=x2=1 |x3=0;int t3=x0+x2=2;int t6=(x2+x6=0)|(x2+x6=2);int t7=x2+x4+x6+x80)|x7=1;return t1 void f(int *x,int n) if(n=10) if(judge(x)show(x);return;xn=0;f(x,n+1);xn=1;f(x,n+1);void main()int x=0,0,0,0,0,0,0,0,0,0;f(x,0);return 0;