如何进行C语言猜凶手及类似题目的实现
导读:本文共2861.5字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 描述:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。以下为4个嫌疑犯的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。现在请根据这些信息,写一个程序来确定到底谁是凶手。思路及分析: 从来没有做过类似题目的同学第一次看见这道题,可能有点发懵。然后开始考虑假设,排列组合,枚举等等...但... ...
目录
(为您整理了一些要点),点击可以直达。描述:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。
以下为4个嫌疑犯的供词:
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手。
思路及分析:
从来没有做过类似题目的同学第一次看见这道题,可能有点发懵。然后开始考虑假设,排列组合,枚举等等...但是这道题的代码结果会让你大吃一惊。
首先,要考虑的是如何用代码表示A,B,C,D这四个人说的话?我们定义一个char变量killer来表示凶手。最能想到的就是如果某个人说的话是成立的话,将他的结果为1(类似于bool类型),否则就是0。这样的想法是正确的。A说,不是A,那么,可以表示为killer != ‘A’。判断成立的话,他就会返回1,否则,返回0。类似的,其他3个人说的话也可以这样来表示。最后,根据3个人说了真话,1个人说了假话得知返回的总和为3。比如,我们假设A就是凶手,那么根据四个人说的话,A说了假话,B也说了假话,和条件是不符合的。这样之后,只是判断了A的情况,B,C,D的情况还没有判断,只需要加一个循环就可以了。
C语言代码如下:
#include<stdio.h>intmain(void){ charkiller='A'; for(killer='A';killer<='D';killer++) { if((killer!='A')+(killer=='C')+(killer=='D')+(killer!='D')==3) { printf("thekilleris%c",killer); } } return0;}
结果如下:
现在,我们来看和它相似的第二道题目:
描述:
两个乒乓球队进行比赛,甲队为ABC三人;乙队为XYZ三人;抽签决定比赛名单,有人向队员打听比赛的名单,A说他不和X比,C说他不和Z比。请编程输出所有可能的对阵方案,并统计方案的个数。
思路及分析:
这道题和猜凶手那道题目的方法是一致的,都是直接把题目的文字描述转换为代码描述。直接使用 for循环即可。代码如下:
#include<stdio.h>intmain(void){ charA=0; charB=0; charC=0; for(A='X';A<='Z';A++) { for(B='X';B<='Z';B++) { for(C='X';C<='Z';C++) { if((A!='X')+(C!='Z')==2) { if(A!=B&&B!=C&&C!=A) { printf("AVS%c,BVS%c,CVS%c\n",A,B,C); } } } } } return0;}
结果如下:
第三道题目:
描述:
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
思路及分析:
暴力破解法即可。代码如下:
#include<stdio.h>intmain(void){ inta=0,b=0,c=0,d=0,e=0; for(a=1;a<=5;a++) { for(b=1;b<=5;b++) { for(c=1;c<=5;c++) { for(d=1;d<=5;d++) { for(e=1;e<=5;e++) { if(((b==2)+(a==3)==1)&&//B第二,我第三 ((b==2)+(e==4)==1)&&//我第二,E第四 ((c==1)+(d==2)==1)&&//我第一,D第二 ((c==5)+(d==3)==1)&&//C最后,我第三 ((e==4)+(a==1)==1))//我第四,A第一 { if(a*b*c*d*e==120) { printf("%d%d%d%d%d\n",a,b,c,d,e); } } } } } } } return0;}
最后一道题目来看,出现了惊人的五个for循环。同时,每一个for循环都是循环5次,时间复杂度达到了O(n * n)。也就是说,一旦要判断的人数增多,计算机的计算速度将会以肉眼可见的速度慢下去。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
如何进行C语言猜凶手及类似题目的实现的详细内容,希望对您有所帮助,信息来源于网络。