• ベストアンサー

3人のじゃんけんのプログラム

三人でじゃんけんをするプログラムを作るために 法則性を探しています。 グーを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人のじゃんけんの 結果を示すプログラムを導く方法はあるかもしないので もしご存知でしたらご教授お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

アルゴリズム系の問題は苦手だけど回答に挑戦。 じゃんけんする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ドキドキ♪

rinnshan
質問者

お礼

ご返信遅れて申し訳ありませんでした。 大変参考になりました。 一人勝ちの場合と二人勝ちの場合に分けるという 発想はありませんでした。

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

勝ちの定義と負けの定義はどうなってますか? 001が勝ちとなってますが、1(チョキ)の一人負けにもとれます。 002が負けとなってますが、2(パー)の一人勝ちにもとれます。

rinnshan
質問者

お礼

記入漏れで申し訳ありませんでした。 最初の数字の人から見た勝ち負けを記入しました。 付き合っていただきありがとうございました。

回答No.2

パターンというか…、「誰かから見た勝ち負け」が分かれば良いのですよね。 だとしたら、(既に分かっていらっしゃるとは思いますが)全員の手を順番に見ていくのが一番単純なアルゴリズムになると思いますよ。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人のじゃんけんなら、このことを利用してより簡単に判断する方法がありそうですね。 あとは、勝ちのパターンと負けのパターンとが鏡合わせになっていることを何らかの形で利用することが出来たら面白そうです。

rinnshan
質問者

お礼

ご回答ありがとうございました。 とりあえず、3人のじゃんけんプログラムは 作ることができました^^

  • junkUser
  • ベストアンサー率56% (218/384)
回答No.1

問題視しているものが良く分からないのですが・・・ 全パターン列挙する必要はないのでは? あいこは、0,1,2 があった場合、または全員が同じ場合 一人勝ち、二人勝ちの場合は、二人がおなじであと一人がどうなっているか これだけでは? もしかして If 文とか Case 文で列挙しようとしていませんか?それでも 3の3条で27通りしかありませんが。

rinnshan
質問者

お礼

そうですね。 一人勝ち、二人勝ちのパターンを組み合わせることにより アルゴリズムを組むことができました。 ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう