博士はパズルの謎Javaベースのブルートフォース方法
正直家族と家族は常に真実、嘘をつくことはありません嘘をついた家族に伝える二つの異なる民族、正直家族から島を横たわっています。博士の謎は賢い男が、彼は人々がどの国から遭遇判断したいと考えていました。
博士の謎は、彼らが正直な家族から来るか、家族を横たわっている可能性があることを知って、3人の男性に遭遇しました。依頼する最初の人:3人の男性を調査するためにどのような家族で、博士はこれが彼らの会話で、自分の質問をした「?あなたは家族何ですか」A:「私たち二人が正直な家族からあります。 「第二の男は言った:」。DOはナンセンス話をしない、我々は唯一の3人に1人が正直なファミリーである必要があり、「言葉への第三者のリスニング後の第二の人は言った:」..はい、唯一の正直家族が「そこにある
彼に従ってください。彼らは家族を決定するための答えです。
コード:
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?"诚实族" : "说谎族");
}
}
}
}
}
}
出力:
说谎族
说谎族
说谎族