千家信息网

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

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这期内容当中小编将会给大家带来有关如何进行C语言猜凶手及类似题目的实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。描述:日本某地发生了一件谋杀案,警察通过排查确定
千家信息网最后更新 2025年01月19日如何进行C语言猜凶手及类似题目的实现

这期内容当中小编将会给大家带来有关如何进行C语言猜凶手及类似题目的实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    描述:

    日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为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 int main(void){        char killer = 'A';        for (killer = 'A'; killer <= 'D'; killer++)        {                if ((killer != 'A') + (killer == 'C') + (killer == 'D') + (killer != 'D') == 3)                {                        printf("the killer is %c", killer);                }        }         return 0;}

    结果如下:

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

    描述:

    两个乒乓球队进行比赛,甲队为ABC三人;乙队为XYZ三人;抽签决定比赛名单,有人向队员打听比赛的名单,A说他不和X比,C说他不和Z比。请编程输出所有可能的对阵方案,并统计方案的个数。

    思路及分析:

    这道题和猜凶手那道题目的方法是一致的,都是直接把题目的文字描述转换为代码描述。直接使用 for循环即可。代码如下:

    #include int main(void) {        char A = 0;        char B = 0;        char C = 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("A VS %c, B VS %c, C VS %c\n", A, B, C);                                                }                                                                                        }                                }                        }                }        return 0;}

    结果如下:

    第三道题目:

    描述:

    5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

    A选手说:B第二,我第三;

    B选手说:我第二,E第四;

    C选手说:我第一,D第二;

    D选手说:C最后,我第三;

    E选手说:我第四,A第一;

    比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。

    思路及分析:

    暴力破解法即可。代码如下:

    #include int main(void){        int a = 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);                                                        }                                                       }                                        }                                }                        }                }        }        return 0;}

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

    上述就是小编为大家分享的如何进行C语言猜凶手及类似题目的实现了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

    题目 凶手 个人 比赛 代码 选手 结果 分析 循环 假话 就是 语言 思路 不和 内容 名单 嫌疑 嫌疑犯 情况 方案 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 唱歌软件开发 ddr4服务器内存有几种 江苏中辉互联网科技有限公司 串口通讯服务器多少钱 河南最好的组装服务器云主机 距离传感器软件开发 鸠鸠互联网科技乔迁 软件开发培训市场低价 宜昌软件开发多少钱 靖江工业网络技术参考价格 邯郸大数据软件开发收费报价表 kafka数据库 dsm网站设置web服务器 网络安全方面政府信息 数字网络安全产业联盟 网吧服务器管理方案 长春网络技术咨询推荐咨询 开州区一站式软件开发流程市场价 坦克世界登陆显示服务器忙 汽车电子总线网络技术包括 网络安全手抄报二年级作文 深圳万国软件开发公司电话 华三路由器网络安全设置教程 内网穿透必须要公网服务器吗 上海诺基亚贝尔软件开发面试 互联网科技开发企业 太仓宝沃招聘软件开发 天龙八部所有服务器都可以用吗 学习软件开发培训机构 网络安全宣传周开幕讲话
    0