为什么我的代码出现无限循环?

时间:2019-05-24 18:45:51

标签: c

我正在尝试计算用户给定范围(exp:start = 1和end = 5)的Collat​​z 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;
}

1 个答案:

答案 0 :(得分:4)

您的代码在设置afora=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重置为一个。