ネットで見つけた「うそつき問題」をJavaで解いてみました。(^_^;
以前、知恵袋の「うそつき問題」で作ったJavaプログラムを雛形にして作りました。(^_^;
『問題5』
ちと面倒な問題。A〜Jの10人からなる家族の1人が花瓶を割ってしまいました。
誰が割ったのかを各人に尋ねたところ、その返答は以下のようであったA:私ではありません
B:Aの言ったことは本当です。またCでもありません
C:割ったのはEかHのどちらかです
D:CかHのどちらかです
E:いいえ、Cではありません。また私でもありません
F:いいえ、Eです
G:いいえ、Eではありません。またAでもありません
H:Cでも私でもありません
J:割ったのはAです。私ではありません。ところが、10人のうち本当のことを言っているのは3人だけです
その人は次のうちどれ①AとCとE
②AとEとH
③AとDとG
④BとFとH
⑤DとEとG
●Lair02.java
/* * Lair02.java */ class Lair02 { public static void main(String[] args) { final String WITNESS="ABCDEFGHIJ "; // 最後の半角スペースは解なし用 final int N=10; // 証言者の人数 final int M= 3; // 正直者の人数 int[][] witness={ {0,1,1,1,1,1,1,1,1,1}, // Aの証言 {0,1,0,1,1,1,1,1,1,1}, // B 〃 {0,0,0,0,1,0,0,1,0,0}, // C 〃 {0,0,1,0,0,0,0,1,0,0}, // D 〃 {1,1,0,1,0,1,1,1,1,1}, // E 〃 {0,0,0,0,1,0,0,0,0,0}, // F 〃 {0,1,1,1,0,1,1,1,1,1}, // G 〃 {1,1,0,1,1,1,1,0,1,1}, // H 〃 {1,1,0,1,1,1,1,0,1,1}, // I 〃 {1,0,0,0,0,0,0,0,0,0}, // J 〃 };//A B C D E F G H I J int[] s=new int[N]; long tm=System.nanoTime(); // Timer Start int n=N; String honest=""; for(int i=0; i< N; i++) for(int j=0; j< n; j++) s[i]+=witness[j][i]; for(int i=0; i< N; i++) if(s[i]==M){ n=i; break; } for(int i=0; i< N; i++) if(witness[i][n]==1) honest+=","+WITNESS.charAt(i); System.out.println("犯 人: "+WITNESS.charAt(n)); System.out.println("正直者: "+honest.substring(1)); tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
犯 人: C 正直者: A,D,G Runtime : 0.001 [sec]
※参考URL
●知恵袋の「うそつき問題」をJavaで解いてみた。
●ネットで見つけた「うそつき問題」をJavaで解いてみた。
●ネットで見つけた「うそつき問題」を自分で解いてみた。
- 作者: 鈴木清士
- 出版社/メーカー: 実務教育出版
- 発売日: 1999/11/01
- メディア: 単行本
- 購入: 2人 クリック: 11回
- この商品を含むブログ (15件) を見る
数的推理 光速の解法テクニック―公務員試験 (公務員基本書シリーズ)
- 作者: 鈴木清士
- 出版社/メーカー: 実務教育出版
- 発売日: 1996/09/01
- メディア: 単行本
- この商品を含むブログ (6件) を見る