解決済みの質問
三人でじゃんけんをするプログラムを作るために
法則性を探しています。
グーを0,チョキを1,パーを2とした時に
あいこであるパターンは
000,012,021,021,102,111,120,201,210,222
勝ちのパターンは
001,010,011,112,121,122,200,202,220
負けのパターンは
002,020,022,100,101,110,211,212,221
でした。(違っていたら申し訳ないです。)
ここから法則を探そうと思うととりあえず、あいこの
パターンは3つの数字を足すと0,3,6のどれかになり
3の倍数になっていることがわかりました。
ですが、勝ちと負けは法則性が見つけられません。
もしかすると、このやり方以外にも3人のじゃんけんの
結果を示すプログラムを導く方法はあるかもしないので
もしご存知でしたらご教授お願いします。
投稿日時 - 2009-11-24 00:56:25
アルゴリズム系の問題は苦手だけど回答に挑戦。
じゃんけんする3人を A, B, C
グー = 0 チョキ = 1 パー = 2
とるする場合
(A + B + C) ÷ 3 のあまりが
:0の場合
あいこ
: 1の場合
ひとりだけ負け
A = B なら C の負け
B = C なら A の負け
それ以外なら B の負け
: 2の場合
ひとりだけ勝ち
A = B なら C の勝ち
B = C なら A の勝ち
それ以外なら B の勝ち
ここから例えば A が勝ったかどうかは
((A + B + C) ÷ 3 のあまり = 1 かつ B = C でない) または ((A + B + C) ÷ 3 のあまり = 2 かつ B = C)
で判定できる。
TRUE に 1 FALSE に 0 という値が与えらるのなら
((A + B + C) ÷ 3 のあまり - 1) = (B = C)
でAの勝ちが分かる。
まちがってないかな…o(;-_-;)oドキドキ♪
投稿日時 - 2009-11-24 11:11:57
お礼
ご返信遅れて申し訳ありませんでした。
大変参考になりました。
一人勝ちの場合と二人勝ちの場合に分けるという
発想はありませんでした。
投稿日時 - 2009-11-27 01:08:02
2人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(3件中 1~3件目)
パターンというか…、「誰かから見た勝ち負け」が分かれば良いのですよね。
だとしたら、(既に分かっていらっしゃるとは思いますが)全員の手を順番に見ていくのが一番単純なアルゴリズムになると思いますよ。3人以上の場合にも対応できます。
別の考え方として、じゃんけんの手がループしていることを利用することが考えられますね。
(0,0,2) = (1,1,0) = (2,2,1)
上記三つはすべて同じ強弱関係を指していますので、互いに変更しても勝敗は変わりません。勝ち負けを調べたいところの手を0にするような前処理を行えば、条件判断はとても簡単になります。
(0,0,1) (0,1,1) (0,1,0)
(0,0,2) (0,2,2) (0,2,0)
これしか残りません。
3人のじゃんけんなら、このことを利用してより簡単に判断する方法がありそうですね。
あとは、勝ちのパターンと負けのパターンとが鏡合わせになっていることを何らかの形で利用することが出来たら面白そうです。
投稿日時 - 2009-11-24 08:50:17
お礼
ご回答ありがとうございました。
とりあえず、3人のじゃんけんプログラムは
作ることができました^^
投稿日時 - 2009-11-27 01:10:37
問題視しているものが良く分からないのですが・・・
全パターン列挙する必要はないのでは?
あいこは、0,1,2 があった場合、または全員が同じ場合
一人勝ち、二人勝ちの場合は、二人がおなじであと一人がどうなっているか
これだけでは?
もしかして If 文とか Case 文で列挙しようとしていませんか?それでも 3の3条で27通りしかありませんが。
投稿日時 - 2009-11-24 05:15:46
お礼
そうですね。
一人勝ち、二人勝ちのパターンを組み合わせることにより
アルゴリズムを組むことができました。
ご回答ありがとうございました。
投稿日時 - 2009-11-27 01:12:33