重生之我是一名程序员 26 ——C语言题目之谁是小偷

哈喽啊大家晚上好!今天要给大家分享的也是C语言中的经典题目——谁是小偷。原题如下:

有五个人,A、B、C、D、E,因为某种原因,有人偷走了公司的一笔钱。以下是五个人的证言: A说:“不是我偷的。” B说:“C是小偷。” C说:“小偷肯定是E。” D说:“我没有偷,这是我的保证。” E说:“B说的不对,我不是小偷。”请写一个程序,判断谁是小偷?

下面是思路分析:

 从五个人中找到说谎者和小偷。

  1. 假设A是小偷,根据五个人的证言,可知只有B的证言与A不符,因此排除此假设。

  2. 假设B是小偷,根据五个人的证言,可知C的证言与B不符,因此排除此假设。

  3. 假设C是小偷,根据五个人的证言,可知E的证言与C不符,因此排除此假设。

  4. 假设D是小偷,根据五个人的证言,可知没有人指认D是小偷,因此排除此假设。

  5. 假设E是小偷,根据五个人的证言,可知B的证言与E不符,因此排除此假设。

因此,只能得出结论:C是小偷。

最后,我们把思路转换成代码,代码如下:

#include <stdio.h>

int main() {
    int suspect = 0;
    for (int i = 0; i < 5; i++) {
        char name;
        int statement;
        printf("请输入第%d个人的姓名(A、B、C、D、E)和陈述(0表示不是小偷,1表示是小偷):", i + 1);
        scanf("%c %d", &name, &statement);
        getchar(); //读取换行符
        if (statement == 1) { //如果是小偷
            switch (name) {
            case 'A':
            case 'B':
            case 'D':
                suspect++; //不符合条件的证言数+1
                break;
            case 'C':
                break;
            case 'E':
                suspect += 2; //不符合条件的证言数+2
                break;
            }
        }
        else { //如果不是小偷
            switch (name) {
            case 'A':
            case 'C':
            case 'D':
                break;
            case 'B':
                suspect++;
                break;
            case 'E':
                suspect += 2;
                break;
            }
        }
    }
    if (suspect == 1) { //只有一个人的证言和其他人不符合
        printf("小偷是C!\n");
    }
    else {
        printf("无法确定小偷!\n");
    }
    return 0;
}

好啦,今天的分享到此结束,大家明天见啦!

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值