对于循环不递增或循环未失败测试

时间:2013-09-17 13:29:13

标签: c++ for-loop while-loop collatz

我有这段代码,它应该找到给定范围内所有整数的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;

}

3 个答案:

答案 0 :(得分:7)

current_number % 2 == 0适用于所有current_number = 0, 2, 4, 6, ...

如果发生这种情况,请将current_number设置为current_number / 2 ..因此当current_number为2时,您将其设置为1,然后将其递增({{1} }),然后又是2(++current_number),所以你将进入!= 1循环,然后因为while你将它再次设置为1 ..依此类推...... :_(

生活提示:调试您的代码,它将节省时间,精力,有时甚至是金钱。

答案 1 :(得分:0)

关于永不失败的循环。如果current_number!= 1并且它不是2(如果是,那么另一个人已经回答),它进入while循环并且永远不会结束,因为......

让我们说它是3:

3%2!= 0,因此它变为10,

10%2 == 0,因此它变为5,

5%2!= 0,因此它变为16

...

永远不会失败。

答案 2 :(得分:0)

在另一个错误旁边,您还使用current_number迭代输入范围,然后更改它以输出Collat​​z序列。您应该更改current_number

的副本