迷语博士的难题 Java-暴力破解法

迷语博士的难题 Java-暴力破解法

诚实族和说谎族是来自两个荒岛的不同民族,诚实族的人永远说真话,而说谎族的人永远说假话。迷语博士是个聪明的人,他要来判断所遇到的人是来自哪个民族的。
迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:问第一个人:“你们是什么族?”,答:“我们之中有两个来自诚实族。”第二个人说:“不要胡说,我们三个人中只有一个是诚实族的。”第三个人听了第二个人的话后说:“对,就是只有一个诚实族的。”
请根据他的回答判断他们分别是哪个族的。

代码:

public class 真假族
{

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// 迷语博士遇到三个人,知道他们可能是来自诚实族或说谎族的。
		// 为了调查这三个人是什么族的,博士分别问了他们的问题,这是他们的对话:
		// 问第一个人:“你们是什么族?”,答:“我们之中有两个来自诚实族。
		// ”第二个人说:“不要胡说,我们三个人中只有一个是诚实族的。
		// ”第三个人听了第二个人的话后说:“对,就是只有一个诚实族的。”

		// 暴力破解法
		int a, b, c;
		boolean A, B, C;
		for (a = 0; a <= 1; a++)/* 穷举每个人是说谎还是诚实的全部情况 */
		{
			if (a == 0)
			{
				A = false;/* 说谎:false 诚实:true */
			} else
			{
				A = true;
			}
			for (b = 0; b <= 1; b++)
			{
				if (b == 0)
				{
					B = false;/* 说谎:false 诚实:true */
				} else
				{
					B = true;
				}
				for (c = 0; c <= 1; c++)
				{

					if (c == 0)
					{
						C = false;/* 说谎:false 诚实:true */
					} else
					{
						C = true;
					}
					if (((A && a + b + c == 2) || (!A && a + b + c != 2))
							&& ((B && a + b + c == 1) || (!B && a + b + c != 1))
							&& ((C && a + b + c == 1) || (!C && a + b + c != 1)))
					{
						System.out.println(A?"诚实族" : "说谎族");
						System.out.println(B?"诚实族" : "说谎族");
						System.out.println(C?"诚实族" : "说谎族");						
					}
				}
			}
		}
	}

}

输出:

说谎族
说谎族
说谎族
发布了8 篇原创文章 · 获赞 6 · 访问量 178

猜你喜欢

转载自blog.csdn.net/Hackergu/article/details/105037832