SRM 157 DIV2 Level One - 数当てゲーム
プログラミング始めた頃に作った気がする。
数当てゲームは、100個の数字の中からランダムに数字を選んで数を当てるゲーム。
もうちょっと簡単にして、上限が9答えが6だとすると、
- 1〜9までの真ん中(1 + 9)/2の5を選ぶと、上です。と出る。
- 5は選んだから一個増やして、6〜9までの間の半分(6 + 9)/2で7。下です。と出る。
- 7は選んだから一個減らして、6〜6で、(6 + 6)/2で6。
3回で正解に辿りついた。
で、上限と回答が与えられるから、何回で答えられるか数えると。
二分検索の問題ですね。
1000までやっても、そんなにメモリを食わないので再帰で・・・と思ったら演算子の優先順位でハマリまくり。
class GuessTheNumber { private: static int guesses(int lower, int upper, int answer) { int res = (lower + upper) / 2; return (res == answer) ? 1 : 1 + ((res > answer) ? guesses(lower, res - 1, answer) : guesses(res + 1, upper, answer)); } public: static int noGuesses(int upper, int answer) { return guesses(1, upper, answer); } };
条件演算子の優先順位は結構低い。
演算子の優先順位なんてキライダ。全部括弧付けちゃいなよ。