1

私はStroustrupの本の演習の1つに取り組んでいます。この演習では、ユーザーが「50未満ですか?」という質問をして、ユーザーが考えている1〜100の数値を推測するプログラムを設計する必要があります。など。答えを得るために7つ以上の質問をすることはできません。

これまでのところ、私はこのようなものを持っています:

string answer;

cout << "Think of a number between 1 and 100.\n";

cout << "Is it even or odd? (E/O)\n";

cin >> answer;

if (answer == "E") 
{
    cout << "Is it less than 50? (Y/N)\n";
    cin >> answer; 
    if (answer == "Y")
    {
        cout << "Is it less than 25? (Y/N)\n";
        cin >> answer;
        if (answer == "Y")
        {
            cout << "Is it less than 15? (Y/N)\n";
            cin >> answer;
            if (answer == "Y")
            {
                cout << "Is it less than 9? (Y/N)\n";
                cin >> answer;
                if (answer == "Y")
                {
                    cout << "Is it less than 5? (Y/N)\n";
                    cin >> answer;
                    if (answer == "Y")
                    {
                        cout << "Is it less than 3? (Y/N)\n";
                        cin >> answer;
                        if (answer == "Y") 
                        {
                            cout << "Your number is 2.";
                        }
                    }
                }
            }
        }
}
}

フロー図のパスが1つしかないので、これは本当に悪いと思います。すでにこのプログラムはかなり長いです。これを行うためのより効率的な方法はありますか?

4

1 に答える 1

1

基本的には、ユーザーの発言に基づいて、前に推測した数の半分を削除するか、半分を追加する必要があります。ループで入力を要求する場合は、毎回数値の半分を追加または削除して、新しい数値を要求するだけです。

したがって、基本的に、各質問をハードコーディングする代わりに、毎回同じ質問をしますが、ループ内で最後の数字/ 2または+(/ 2)を使用します。

私たちはあなたが本当にあなたのためにコードを書いてほしくないので、私はしません。その手がかりであなたはそれを理解できると確信しています!これを行うにはループが必要なので、for/whileループを確認してください。

于 2012-10-06T20:30:38.733 に答える