题目
已知有四个人 A、B、C、D 是嫌疑人,四人分别陈述如下:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定谁是罪犯
分析
case 1: 如果说A说的是假话,即BCD说的都是真话。即 是A,是C,是D,不是D。说法相互矛盾,该推论错误。case 2: 如果说B说的是假话,即ACD说的都是真话。即 不是A,不是C,是D,不是D。说法相互矛盾,该推论错误。case 3: 如果说C说的是假话,即ABD说的都是真话。即 不是A,是C,不是D,不是D。此推论正确,C是嫌疑人。case 4: 如果说D说的是假话,即ABC说的都是真话。即 不是A,是C,是D,不是D。说法相互矛盾,该推论错误。因为说谎者即是罪犯,即只要找出说谎者就能解决问题
代码
public class Homework0515 {public static void main(String[] args) {char[] person = {'A', 'B', 'C', 'D'}; int temp = 0; for(int i = 0; i < 4; i++){if(( ( person[i] != 'A' ? 1 : 0 ) + ( person[i] == 'C' ? 1 : 0 ) + ( person[i] == 'D' ? 1 : 0 ) + ( person[i] != 'D' ? 1 : 0 ) ) == 3 ){temp = i; }}System.out.println( person[temp] + " 是罪犯");}}
总结
该题难点在于,怎么把陈述的内容,用代码进行表达,进而进行逻辑上的表示,并找出判定条件
思考
如果,4人分别陈述如下:A说:不是我。B说:不是D。C说:是D。D说:A说的对
仍是 3 个人说了真话,1 个人说的是假话。判断:谁说谎,谁是罪犯
分析
case 1: 若A说谎,即BCD说的都是真话。即 (是A),不是D, 是D, A对-不是A。 说法相互矛盾,该推论错误。1 0 1 0
case 2: 若B说谎,即ACD说的都是真话。即 不是A,(是D),是D, A对-不是A。 此推论说明D是嫌疑人。0 1 1 0
case 3: 若C说谎,即ABD说的都是真话。即 不是A,不是D,(不是D),A对-不是A。 无法判断。0 0 0 0
case 4: 若D说谎,即ABC说的都是真话。即 不是A,不是D,是D, (A错-是A)。 说法相互矛盾,该推论错误。1 0 1 1
* B 说谎
* D 凶手
代码
待解答若哪位大佬有解法,欢迎私聊或评论,一起探讨,感激不尽
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!