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