数当てゲームを作ってみよう
有限区間(例えば1〜100)に想定された整数解を言い当てるゲームで、 解答者の答えに対して正解がそれよりも大きい/小さいとき、 「正解はそれよりも大きい/小さい」というヒントが得られる。 もちろん正解を答えたときには「正解」と知らされる。 できるだけ少ない解答数で正解に至ることを競う。
どんなゲームか遊んでみる
(←数当てゲーム完成版のイメージ)
順を追って作っていこう!(制御構造)
想定した正解(kotae)に対して、キー入力された解答(guess)が正解か否かを判定します。
下のプログラムを実行してみて、フローチャートを想像して書いてみよ!
数当てゲーム1
実は
こんなフローチャート
で、こんなソースでした
kazuate1.c
「正解はそれよりも大きい/小さい」あるいは「正解」と判定します。
下のプログラムを実行してみて、フローチャートを想像して書いてみよ!
数当てゲーム2
実は
こんなフローチャート
で、こんなソースでした
kazuate2.c
正解に至るまで繰り返します。
下のプログラムを実行してみて、フローチャートを想像して書いてみよ!
数当てゲーム3
実は
こんなフローチャート
で、こんなソースでした
kazuate3.c
-1を入力したら途中でやめられるようにしてみよ!
まず、フローチャートを書いてから、プログラムを書いてみよ!
実は
こんなフローチャート
でしたが、ソースは?
正解すると次の問題を出すようにしてみよ!
まず、フローチャートを書いてから、プログラムを書いてみよ!
例えば、 kotae = (kotae+57)%100+1; で次の答えを決めてみよう!
できあがりのイメージ
数当てゲーム4
順を追って作っていこう!(乱数)
何回かトライすると正解がバレてしまいます。乱数を用いて答えを自動生成してみましょう!
関数
rand(void)
および
srand(unsigned seed)
を調べてみる
実行の度に違う答えのシーケンス(数列)を生成するようにするにはどうしたら良いでしょうか!?
ヒント:seedを毎回変える方法を考えてみよ
完成版を作成してみよ!
アルゴリズム
数当てゲームのように「より大きい/より小さい」というヒントを得ながら正解に至る問題に対して、試行回数を最小にする方法について述べよ。