我正在尝试计算用户给定范围(exp:start = 1和end = 5)的Collatz Conzecture的所有循环长度,但是我的循环在我的代码中运行不正常。
这是我的代码:
#include<stdio.h>
int main()
{
int i,j,count=1;
while(1)
{
scanf("%d %d",&i,&j);
count=1;
int a=0;
for(a=i;a<=j;a++)
{
while(a>1)
{
if(a%2!=0)
{
a=3*a+1;
}
else
{
a=a/2;
}
count++;
}
printf("%d\n",count);
}
}
return 0;
}
答案 0 :(得分:4)
您的代码在设置a
或fora=i;a<=j;a++)
时,将a
用作a=3*a+1
中的循环计数器,并将a=a/2
用作计算序列中的值。当序列的循环结束时(由于while(a>1)
),a
的值为1。因此它永远不会到达j
循环中的for
。
将不同的对象用于不同的目的。在for
循环中,为a
设置一个不同的对象,例如int b = a;
,然后使用b
来评估序列。
您还希望在每次试用前将count
重置为一个。