
"Задача 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 включительно. Для каждого теста три числа следует выводить в отдельной строке, разделяя одним пробелом."Помогите , Хелп , срочноЯЗЫК СИ

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

#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;
}



Конечно, я могу помочь вам написать программу на языке 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).


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







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili