c - 为什么我的 Collatz 序列的 C 程序不打印最终值 (1)?
问题描述
我目前正在为 C 上的 collatz 序列制作一个程序,但是最后一个值 1 没有被打印出来。比如我输入8时,结果一定是8 4 2 1,但它只打印8 4 2,或者我输入5时,它只打印5 16 8 4 2。我可以在里面放什么while ( )
来打印完整的回答?谢谢!!
void
CollatzSequence(int n)
{
int x = 1;
do {
x++;
printf("%3d", n);
if (n%2==0)
n /= 2;
else
n = 3 * n + 1;
}
while ( );
printf("\n");
}
int
main()
{
int n;
do {
printf("Input an integer greater than 0: ");
scanf("%d", &n);
if (n <= 0)
printf("Invalid input. Try again.\n");
} while (n <= 0);
CollatzSequence(n);
return 0;
}
解决方案
代码需要新的循环退出条件。
循环完成一次1
打印。
下面的示例。
void CollatzSequence(int n) {
for (;;) {
printf("%3d", n);
if (n == 1)
break;
if (n % 2 == 0)
n /= 2;
else
n = 3 * n + 1;
}
printf("\n");
}
推荐阅读
- .net-5 - 多实例问题 - .NET 框架 4.8 WPF 应用程序到 .NET5
- python - Odoo14,外部 API:自定义模型在通过 python 访问时有效,但在通过 PHP 访问时无效
- regex - - 在 powershell 中替换和正则表达式
- python - 我无法在 Windows 上安装 libpostal 库
- c++ - 警告 C4018:“<”:有符号/无符号不匹配?
- m3u8 - 了解 m3u8 文件格式及其工作原理
- jquery - 模态 Ajax 调用不替换数据响应
- node.js - cart.save() 不是更新文档的函数
- yocto - 如何在 Yocto Linux 中运行 cachefilesd
- java - 当我通过 USB 在我的手机上运行我的 android studio 应用程序时,它给了我这个错误 Unable to load class 'org.apache.commons.io.FileUtils'