如何进行C语言猜凶手及类似题目的实现(c语言,开发技术)

时间:2024-05-02 14:47:46 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    描述:

    日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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;}

    结果如下:

    如何进行C语言猜凶手及类似题目的实现

    现在,我们来看和它相似的第二道题目:

    描述:

    两个乒乓球队进行比赛,甲队为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;}

    结果如下:

    如何进行C语言猜凶手及类似题目的实现

    第三道题目:

    描述:

    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;}

    如何进行C语言猜凶手及类似题目的实现

    最后一道题目来看,出现了惊人的五个for循环。同时,每一个for循环都是循环5次,时间复杂度达到了O(n * n)。也就是说,一旦要判断的人数增多,计算机的计算速度将会以肉眼可见的速度慢下去。

     </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
    本文:如何进行C语言猜凶手及类似题目的实现的详细内容,希望对您有所帮助,信息来源于网络。
    上一篇:Java JWT如何实现跨域身份验证下一篇:

    3 人围观 / 0 条评论 ↓快速评论↓

    (必须)

    (必须,保密)

    阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18