Почему я получаю бесконечный цикл в моем коде? - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь сосчитать всю длину цикла Collatz Conzecture для диапазона (exp: start = 1 и end = 5), заданного пользователем, но мой цикл не работает идеально в моем коде.

вот мой код:

#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 Ответ

4 голосов
/ 24 мая 2019

Ваш код использует a в качестве счетчика цикла в fora=i;a<=j;a++) и использует a в качестве значения в вычисляемой последовательности, когда он устанавливает a=3*a+1 или a=a/2. Когда цикл для последовательности заканчивается (из-за while(a>1)), a имеет значение один. Таким образом, он никогда не достигает j в цикле for.

Используйте разные объекты для разных целей. Внутри цикла for установите для другого объекта значение a, например int b = a;, и используйте b для оценки последовательности.

Вам также потребуется сбросить count на единицу перед каждым испытанием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...