Возникли проблемы с тестом гипотезы Коллатца в Си - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь создать код, который будет принимать числа от 2 до 100, и проверить каждый на предмет гипотезы Коллатца. Цель состоит в том, чтобы для каждого числа, если оно было четным, разделить его на два, а если оно нечетное, умножить его на 3 и добавить 1. Оно печатает каждый шаг, и каждое число должно прекратить тестирование, если оно достигает 1. Почемуэто не работает?

#include <stdio.h>

int main()
{
    int number, position;
    position == 2;
    number == 2;
    while (position <= 100)
    {
        while (number != 1)
        {
            if (number % 2 == 0)
            {
                number = number/2;
                printf("%d\n", number);
            }
            else if (number % 2 != 0)
            {
                number = number*3;
                number = number + 1;
                printf("%d\n", number);
            }
        }
    position = position + 1;
    number = position;
    }
}

Он печатает повторяющиеся Os

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Вы установили position и number с двойным равным == (оператор сравнения) вместо использования одинарного равного = (оператор присваивания), так что алгоритм сравнивает их вместо присвоения значения. Назначение должно выглядеть следующим образом:

position = 2;
number = 2;

Кроме того, вы можете сделать это при первом их определении:

int number=2, position=2;

Кроме того, что код верен, единственное, что нужно выделить, эточто вам не нужно использовать else if, потому что он может быть просто четным или нечетным, поэтому достаточно одного else.

Надеюсь, я помог: -)

0 голосов
/ 22 октября 2019

Исправление == против =:

position = 2;
number = 2;

Кроме того, else if не требуется. Противоположность четного является нечетным , поэтому достаточно простого else: -)

...