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