对于循环不递增或循环不失败测试
For loop not incrementing or while loop not failing test
我有这部分代码,它应该找到给定范围内所有整数的 Collatz 序列,由用户输入定义。问题在于,在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;
}
>current_number % 2 == 0
对所有current_number = 0, 2, 4, 6, ...
都是正确的。
发生这种情况时,您将current_number
设置为current_number / 2
.。因此,当current_number
为 2 时,您将它设置为 1,然后递增它 ( ++current_number
),然后它又是 2 ( != 1
),所以您将进入 while
循环,然后因为2 % 2 = 0
您将再次将其设置为 1。等等..:_(
终身提示:调试你的代码,它会节省时间、精力,有时还可以节省金钱。
除了另一个错误之外,您还使用 current_number
遍历输入范围,并对其进行更改以输出 Collatz 序列。 您应该更改 current_number
的副本。
关于永不失败的循环。如果 current_number != 1 并且它不是 2(如果是,另一个人已经回答了),它会进入 while 循环并且永远不会结束,因为......
假设它是 3:
3 % 2 != 0,所以它变成 10,
10 % 2 == 0,所以它变成 5,
5 %2 != 0,所以它变成 16
。
永远不会失败。
相关文章:
- 为什么我的for循环不能正确获取argv
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 嵌套While循环不起作用(C++问题)
- 嵌套的 for 循环不循环通过第二个数组
- C/C++:socket() 创建在循环中失败,打开的文件太多
- For 循环不会停止在 C++ Arduino
- while 循环不以哨兵值终止
- 为什么循环不会停止?C++
- 虽然循环不读取整个 ifstream 文件
- 循环不继续无法弄清楚为什么
- C++ 我的开关格式中的循环不允许我显示菜单选项或接受输入?
- 在 mmap'ed 区域上使用 memcpy 崩溃,for 循环不会
- 谁能弄清楚为什么我的循环会失败?
- 为什么程序运行时我的第二个循环不执行?
- 当我告诉它通过控制台执行此操作时,我的c ++循环不会停止
- 为什么当我对数组使用增量操作时,do for 循环不起作用
- 在矩阵逆变器上工作,由于某种原因,我的指数循环不起作用
- 对于循环执行失败,因为变量我不会递增,为什么?
- 对于循环不递增或循环不失败测试