判断推理のカードの問題をJavaで解いてみました。(^_^;
1〜9の数字が書かれたカードが1枚ずつあり、このカードをABCDEFの6人に配った。
A〜Fが、自分のカードの数字を合計したところ、それぞれ、10,4,7,12,3,9であった。
どの人も3枚以上は受け取っていないものとして、確実にいえることは次のうちどれか。1.1のカードはEが持っている
2.2のカードはCが持っている
3.3のカードはFが持っている
4.4のカードはCが持っている
5.5のカードはDが持っている
●Card01.java
/* * Card01.java * */ class Card01 { static void swap(int[] s, int i, int j) { int t = s[i]; s[i] = s[j]; s[j] = t; } static boolean next_perm(int[] p, int n, int r) { int i, j, k; if(r <= 0 || n < r) return(false); for(i = r + 1; i <= n-1; i++) for(j = i; j >= r + 1 && p[j-1] < p[j]; j--) swap(p,j,j-1); for(i = n - 1; i > 0 && p[i-1] >= p[i]; i--); if(i==0) return(false); for(j = n - 1; j > i && p[i-1] >= p[j]; j--); swap(p,j,i-1); for(k = 0; k <= (n-i-1)/2; k++) swap(p,i+k,n-k-1); return(true); } public static void main(String[] args) { int[] p={0,0,0,1,2,3,4,5,6,7,8,9}; long tm=System.nanoTime(); // Timer Start do_cont: do{ for(int i=0; i< 12; i+=2) if(p[i]>=p[i+1]) continue do_cont; if(p[ 0]+p[ 1]!=10) continue; // Aの合計 if(p[ 2]+p[ 3]!= 4) continue; // Bの合計 if(p[ 4]+p[ 5]!= 7) continue; // Cの合計 if(p[ 6]+p[ 7]!=12) continue; // Dの合計 if(p[ 8]+p[ 9]!= 3) continue; // Eの合計 if(p[10]+p[11]!= 9) continue; // Fの合計 // チェックを潜り抜けたものだけを表示 System.out.printf("A:%2d,%2d\n",p[ 0],p[ 1]); System.out.printf("B:%2d,%2d\n",p[ 2],p[ 3]); System.out.printf("C:%2d,%2d\n",p[ 4],p[ 5]); System.out.printf("D:%2d,%2d\n",p[ 6],p[ 7]); System.out.printf("E:%2d,%2d\n",p[ 8],p[ 9]); System.out.printf("F:%2d,%2d\n",p[10],p[11]); System.out.println(); }while(next_perm(p,12,12)); tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
A: 2, 8 B: 0, 4 C: 1, 6 D: 5, 7 E: 0, 3 F: 0, 9 Runtime : 3.332 [sec]
- 作者: 資格試験研究会
- 出版社/メーカー: 実務教育出版
- 発売日: 2009/01/23
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 8回
- この商品を含むブログ (6件) を見る
- 作者: 鈴木清士
- 出版社/メーカー: 実務教育出版
- 発売日: 1999/11/01
- メディア: 単行本
- 購入: 2人 クリック: 11回
- この商品を含むブログ (15件) を見る