Вопрос задан 26.09.2023 в 20:02. Предмет Информатика. Спрашивает Чарекчян Денис.

"Задача 3n + 1 Рассмотрим следующий алгоритм генерации последовательности чисел:1. input n2.

print n3. if n = 1 then STOP4. if n is odd then n = 3 * n + 15. else n = n / 26. GOTO 2Например, для n = 22 будет сгенерирована следующая последовательность чисел:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1Полагают (но это еще не доказано), что этот алгоритм сойдется к n = 1 для любого целого n. По крайней мере, это предположение верно для всех целых n, для которых 0 < n < 1,000,000.Длиной цикла числа n будем называть количество сгенерированных чисел в последовательности включая 1. В приведенном примере длина цикла числа 22 равна 16.Для двух заданных чисел i и j необходимо найти максимальную длину цикла среди всех чисел между i и j включительно.Входные данныеКаждый тест задается в отдельной строке и содержит пару целых чисел i и j. Входные числа будут меньше 1000000 и больше 0. Считайте, что для вычислений достаточно использовать 32 битный целочисленный тип.Выходные данныеДля каждой пары чисел i и j выведите числа i и j в том же порядке, в каком они поступили на вход. После чего выведите максимальную длину цикла среди всех целых чисел между i и j включительно. Для каждого теста три числа следует выводить в отдельной строке, разделяя одним пробелом."Помогите , Хелп , срочноЯЗЫК СИ
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Катахова Люба.

#include <stdio.h>

int cycle_length(int n) {

   int cnt;

   for (cnt = 1; n != 1; cnt++)

       if (n % 2)

           n = 3 * n + 1;

       else

           n = n / 2;

       return cnt;

}

int check(int i, int j) {

   int mx = 0;

   for (; i <= j; i++) {

       int h = cycle_length(i);

       if (mx < h)

           mx = h;

   }

   return mx;

}

int main() {

   int i, j;

   while (scanf("%d %d", &i, &j) == 2) {

       int tmp, itemp = i, jtemp = j;

       if (i > j) {

           tmp = i;

           i = j;

           j = tmp;

       }

       printf("%d %d %d\n", itemp, jtemp, check(i, j));

   }

   return 0;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно, я могу помочь вам написать программу на языке C, которая решает данную задачу. Ниже представлен код для решения этой задачи:

c
#include <stdio.h> int cycle_length(int n) { int length = 1; // Начинаем с 1, так как последний элемент всегда равен 1 while (n != 1) { if (n % 2 == 1) { n = 3 * n + 1; } else { n /= 2; } length++; } return length; } int main() { int i, j; while (scanf("%d %d", &i, &j) != EOF) { int max_length = 0; // Убедимся, что i всегда меньше j if (i > j) { int temp = i; i = j; j = temp; } // Перебираем все числа от i до j и находим максимальную длину цикла for (int num = i; num <= j; num++) { int length = cycle_length(num); if (length > max_length) { max_length = length; } } printf("%d %d %d\n", i, j, max_length); } return 0; }

Этот код сначала определяет функцию cycle_length, которая вычисляет длину цикла для заданного числа n, следуя алгоритму. Затем в main программа считывает пары чисел i и j, перебирает все числа между ними и находит максимальную длину цикла. Результат выводится в требуемом формате.

Вы можете скомпилировать эту программу с помощью компилятора C, например, GCC, и запустить на тестовых данных. Помните, что для каждой пары чисел i и j программа ожидает ввода, и вы можете завершить ввод, нажав Ctrl+D (на Unix-подобных системах) или Ctrl+Z (на Windows).

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос