officialandrey
@officialandrey

Почему выходит из цикла?

Супер простая программа, но что-то я туплю: ( Почему выходит из цикла?
Цель:
Есть число a. Если оно делиться на 2 без остатка (то-есть четное a), тогда выполняем операцию a=a/2,
в ином случаи (если число a не четное), выполняем операцию a=a*3+1, и проводим итерацию до тех пор пока a==1 (пока число не будет ровняться 1).
Как только число a=1, выходим из цикла и выводим его.

int main() {
	
	int i, j, N = 6, res;

	for (i = 0; i < N; i++) {
		res = 2;
		for (j = 0; res == 1; j++) {
			if (res % 2 == 0) {
				res = res / 2;
			}
			else {
				res = ((res * 3) + 1);
			}
			printf("\t %d", res);
		}
		printf("%d %d \n", i, res);
		res++;
	}

	return 0;
}
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ответы на вопрос 2
0xD34F
@0xD34F
Во-первых - неправильное условие окончания внутреннего цикла.

Во-вторых - вы используете переменную res в двух качествах - как начальное значение последовательности, и как текущее значение последовательности. Очевидно, это должны быть две разные переменные.

В-третьих - почему вы на каждой итерации внешнего цикла в качестве начального значения последовательности задаёте 2? Очевидно, что так вы будете получать каждый раз один и тот же результат, что вряд ли входит в ваши планы.

В-четвёртых - зачем для внутреннего цикла использовать for? Достаточно и while.

Вот вам исправленный вариант вашего кода, думайте:

int
  N = 6,
  start = 2;

for (int i = 0; i < N; i++) {
  int val = start;

  printf("\n%d: ", val);

  while (val != 1) {
    if (val % 2 == 0) {
      val = val / 2;
    } else {
      val = val * 3 + 1;
    }

    printf("\t%d", val);
  }

  start++;
}
Ответ написан
Комментировать
bogolt
@bogolt
А что умение дебажить в уме ( на листе бумаги ) или даже дебаггером уже совершенно утеряно у подрастающих поколений? По-моему ответы на подобные вопросы просто вредны для самого специалиста, ну или человека который хочет стать таковым.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы