質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

1回答

1486閲覧

C言語 ジャンケン経験値プログラムについて

kkkkt

総合スコア5

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

0クリップ

投稿2020/01/11 14:46

編集2020/01/11 15:13

前提・実現したいこと

http://fanblogs.jp/hajimetecpc/archive/270/0
上記のサイトにて記載されていたプログラムの一部の詳しい理解ができず困っています。
これはジャンケンプログラムの経験値考慮です。
該当箇所がどのような意味なのか知りたいです。

発生している問題・エラーメッセージ

記載されている通りにプログラミングをすると問題なく動くのですが意味が分からないままだと今後使う事ができません。

該当のソースコード

C言語

1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5int main(void) { 6int myJanken; 7int previous = 0; 8int twoDMemory[3][3] = {{0, 0, 0}, {0,0,0}, {0,0,0}}; 9int prediction; 10int counter = 0; 11int janken_ai; 12 13srand((unsigned)time(NULL)); 14while (myJanken >= 0 && myJanken <= 2) { 15printf("じゃんけんAIと「じゃんけん」をしよう!\n(0=グー、1=チョキ、2=パー、それ以外=終了:数値を入力後「enter」キー)\n:"); 16scanf("%d",&myJanken); 17if (myJanken < 0 || myJanken > 2) break; 18counter++; 19printf("\nじゃんけん、ぽん!\n"); 20/* 5回目までは乱数でじゃんけんを出し、その後は経験値(直前の手)を考慮 */ 21if (counter < 6) { 22janken_ai = rand() % 3; 23} else { 24ここからprediction = 0; 25if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1; 26if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2; 27ここまでです。 28janken_ai = (prediction + 2) % 3; 29} 30if (janken_ai == 0) { 31printf("じゃんけんAI:「グー」です。\n"); 32} else if (janken_ai == 1) { 33printf("じゃんけんAI:「チョキ」です。\n"); 34} else { 35printf("じゃんけんAI:「パー」です。\n"); 36} 37printf("\n\n"); 38 39twoDMemory[previous][myJanken]++; 40previous = myJanken; 41 42} 43 44} 45

試したこと

インターネットで探しましたが該当するものが見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

初心者の為詳しいことはわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2020/01/11 15:03

コードは専用のフォーマット枠があります. ファイル毎に, 入力枠の上辺にある <code> を押すと出てくる ``` で囲まれた "コード" という文字列を置き換える形で入力(コピペ)してください. その際, ``` の右にある "ここに言語を入力" を "c" と置き換えて頂きますと, さらに言語に合わせてフォント等が微調整されます. ご質問は編集できます. 入力枠の下にはプレビューもありますのでご確認ください. > 該当箇所がどのような意味なのか知りたい どこが該当箇所で何を探したのでしょう.
jimbe

2020/01/11 15:07

失礼しました. 該当箇所とは >ここからprediction = 0; >if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1; >if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2; >ここまでです。 でしたか. 埋もれてしまって分かりませんでした.
kkkkt

2020/01/11 15:10

すみませんでした。使うのが初めてなもので理解していませんでした。 早急に直してきます。
kkkkt

2020/01/11 16:22

追記 prediction = 0; >if (twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1; >if (twoDMemory[previous][prediction] < twoDMemory[previous][2]) prediction = 2; またここの部分でAIが相手の手を予測しているという事ですが、なぜ[1]にすると1[2]は2と予測できるのでしょうか。単純に左辺には1が少ない。だから1が来るだろう2が少ない2と予想しようという事でしょうか。
jimbe

2020/01/11 18:23

この数行をもって AI と言うのは盛り過ぎだと思いますが...蓋を開けたらこんなモンということかもしれません. 不等号の向きからして, 多いほうを選んでいるとみるべきでしょう.
guest

回答1

0

ベストアンサー

該当箇所では prediction を求めています.
では prediction は何かと見ますと, 直後に janken_ai = (prediction + 2) % 3; とありますので, 「相手が出すと思われる手」です.
prediction を求める為に使われている twoDMemory は twoDMemory[previous][myJanken]++; とありますので, 「前回ある手を出してから今回ある手を出した回数」です.
それを理解した上で該当箇所を見ますと,「前回ある手を出したので今回出す可能性(回数)が最も高い(多い)手」として prediction を求めていることになります.

投稿2020/01/11 15:16

編集2020/01/11 18:13
jimbe

総合スコア12648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kkkkt

2020/01/11 15:47 編集

(twoDMemory[previous][prediction] < twoDMemory[previous][1]) prediction = 1; ここで考えると今回の予想を[1]とすると 前回      今回 ぐ ち ぱ < ぐ ち ぱ 2 0 1   2 1 1 と見てチョキが少ないからチョキと予想しようという事でしょうか。
jimbe

2020/01/11 18:11 編集

その一行の前に prediction = 0; があります. ですので, まず相手がグーを出すと仮定(予想)し, その後この行でグーを出した回数(twoDMemory[previous][prediction])とチョキを出した回数(twoDMemory[previous][1])を比較して, チョキのほうが多かったら仮定(予想)をチョキに変えています(prediction=1). 同様に次の行でパーの回数(twoDMemory[previous][2])とを比較して, パーのほうが多かったらパーに変えています(prediction=2).
kkkkt

2020/01/11 18:26

上から下に濾していくイメージなんですね。勝ち抜き戦というか ありがとうございます とても助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問