蓝桥杯07 java 断案

蓝桥杯07 java 断案,第1张

蓝桥杯07 java 断案

题目描述

公安人员审问甲、乙、丙、丁四个嫌疑犯,已确知,这四个人当中仅有一人是偷窃者,还知道这四个人的答话,要么完全诚实,要么完全说谎。在回答公安人员的问话中: 
甲说:“乙没有偷,是丁偷的。” 
乙说:“我没有偷,是丙偷的。” 
丙说:“甲没有偷,是乙偷的。” 
丁说:“我没有偷,我用的那东西是我家里的。” 
请根据上述四人答话,判断谁是偷窃者。 

要求

输出偷窃者是谁,A表示甲,B表示乙,C表示丙,D表示丁。 

算法描述

甲乙丙丁四人,必有一人是小偷,我们分别猜测某人是小偷,然后我们判断是都说谎了,还是都没说谎;

假设A是小偷,此时甲乙丙都说谎了,丁没说谎,不符合要求,继续执行循环,假设B是小偷,B为小偷那么其他人都不是小偷,此时甲乙丙丁都没说谎,符合要求。

public class thief {
    public static void main(String[] args) {
        boolean[] a = new boolean[4];//将甲乙丙丁均存入a数组,并初始为false,都不是小偷
        boolean[] b = new boolean[4];//将甲乙丙丁说的话存入b数组
        for (int i = 0; i < 4; i++) {
            a[i] = true;         //假设是小偷(只有一个小偷)
            if (i > 0) {
                a[i - 1] = false;
            }
            b[0] = !a[1] && a[3];
            b[1] = !a[1] && a[2];
            b[2] = !a[0] && a[1];
            b[3] = !a[3];
            //他们的回答要么完全对,要么完全不对
            if(!b[0]) {
               if (!(a[1] && !a[3])) {
                    continue;
                }
            }
            if(!b[1]) {   
                 if (!(a[1] && !a[2])) {
                    continue;
                }
            }
            if(!b[2]) {   
                  if (!(a[0] && !a[1])) {
                    continue;
                }
            }
            if(!b[3]) {   
               if(!a[3]){
                   continue;
               }
            }
           System.out.println((char)(i+65)+"是小偷");
        }
    }
}

结果显示

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5673072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存