这是我第一次尝试C程序(我是Java程序员)。
基本上这是一个应该采用正整数的程序,并应用Collatz猜想:
n =
n/2, if n is even
3 × n + 1, if n is odd
它持续这样做直到n = 1.
在我的程序中,我将一个名为value的const int初始化为100(表示n的初始值),并将该值复制到名为newVal的int变量。
然后fork()一个新进程,并且在子进程中不断应用Collatz猜想,而newVal是!= 1,每次应用时都会打印新值。最后当newVal = = 1时,循环结束,我最后一次打印该值。
只有,根本没有打印。我没有得到任何错误(我在使用putty,没有IDE的服务器上写这个),根本就没有输出。我的代码:
int main()
{
const int value = 100;
pid = fork();
if (pid == 0) { /* child process */
while (value != 1){
if(!value%2){
value = value/2;
}
if(value%2){
value = (value*3)+1;
}
printf("%d", value);
}
printf("%d", value);
}
else if (pid > 0) {
exit(0);
}
}
答案 0 :(得分:1)
如果newval
在循环顶部为2,则在下一循环时它将为4。
在第二个else
之前需要if
。或者,只需用if
替换第二个else
- 对于相同的值,两种情况都不能为真。