题目描述
公安人员审问甲、乙、丙、丁四个嫌疑犯,已确知,这四个人当中仅有一人是偷窃者,还知道这四个人的答话,要么完全诚实,要么完全说谎。在回答公安人员的问话中:
甲说:“乙没有偷,是丁偷的。”
乙说:“我没有偷,是丙偷的。”
丙说:“甲没有偷,是乙偷的。”
丁说:“我没有偷,我用的那东西是我家里的。”
请根据上述四人答话,判断谁是偷窃者。
要求
输出偷窃者是谁,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)+"是小偷"); } } }
结果显示
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)