2

ユーザー入力によって定義された、特定の範囲内のすべての整数の Collat​​z シーケンスを見つけることになっているコードのこのセクションがあります。問題は、forループcurrent_number内でインクリメントされないか、内側のwhileループでcurrent_number != 1失敗しないことです。私は何が欠けていますか?

while (lower != 0 && upper != 0) {
    cout << "Lower bound (integer): ";
    cin >> lower;
    cout << "Upper bound (integer): ";
    cin >> upper;
    if (lower == 0 || upper == 0)
        return 0;
    for (current_number = lower; current_number <= upper;
        ++current_number) {
            //cout << current_number << endl;
            counter = 0;
            sequence = sequence + to_string(current_number) + ", ";
            while (current_number != 1) {
                if (current_number % 2 == 0) {
                    current_number = current_number / 2;
                    sequence = sequence + to_string(current_number) + ", ";
                }
                else {
                    current_number = current_number * 3 + 1;
                    sequence = sequence + to_string(current_number) + ", ";
                }
                cout << current_number << endl;
                ++counter;
            }
            //if (counter > longest) {
            //  longest = counter;
            //  the_longest_seed = current_number;
            //}
    }
    cout << sequence << endl;

}
4

3 に答える 3

7

current_number % 2 == 0すべてに当てはまりますcurrent_number = 0, 2, 4, 6, ...

これが発生すると、 に設定current_numberしますcurrent_number / 2..current_numberが 2 の場合は 1 に設定し、それをインクリメント ( ++current_number) すると、再び 2 になります ( )。つまり、ループに!= 1入ります。もう一度1に設定します..など.. :_(while2 % 2 = 0

人生のヒント: コードをデバッグしてください。時間、労力、そして場合によってはお金も節約できます。

于 2013-09-17T13:35:46.853 に答える
0

失敗しないループについて。current_number != 1 で、それが 2 でない場合 (2 である場合、相手が応答した場合)、while ループに入り、決して終了しません。なぜなら...

3だとしましょう:

3 % 2 != 0 なので 10 になり、

10% 2 == 0 なので 5 になり、

5 %2 != 0 なので 16 になります

...

決して失敗しません。

于 2013-09-17T13:36:22.890 に答える
0

Next to the other error, you are also using current_number to iterate over the input-range and you're changing it to output your Collatz sequence. You should change a copy of current_number.

于 2013-09-17T13:38:58.143 に答える