На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1) Строится двоичная запись числа N.
2) К этой записи дописываются справа ещё два разряда по следующему правилу:
a) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;
b) над этой записью производятся те же действия – справа дописывается остаток от деления суммы цифр на 2.
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите такое наименьшее число N, для которого результат работы алгоритма больше 45.
В ответе это число запишите в десятичной системе счисления.
C/C++
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
Никаких программ для перебора тут не нужно. А первый ответчик, которому ты поставил лайк, вообще написал галиматью от нейросети. Его ответ очевидно неверен, учитывая, что результат больше исходного числа в 4+ раза, и значит, исходное нужно искать где-то в районе [45/ 4] = 11, а никак не 23.
Представим число 46 (наименьшее, которое мы можем получить, чтобы выполнить условие задачи) в двоичной системе:
По указанному алгоритму нужно приписать справа 1 и 0, по чётности количества единиц, так что в итоге мы и получим 46.
Осталось понять, что с меньшими числами.
Исходная десятка (1010) приведёт к числу 40 (101000), девятка - к ещё меньшему, т.к. мы в результате потеряем третий и более высокие разряды.
Поэтому ответ: десятичное
Представим число 46 (наименьшее, которое мы можем получить, чтобы выполнить условие задачи) в двоичной системе:
101110
Без двух последних разрядов это будет 1011
(десятичное 11)По указанному алгоритму нужно приписать справа 1 и 0, по чётности количества единиц, так что в итоге мы и получим 46.
Осталось понять, что с меньшими числами.
Исходная десятка (1010) приведёт к числу 40 (101000), девятка - к ещё меньшему, т.к. мы в результате потеряем третий и более высокие разряды.
Поэтому ответ: десятичное
11
Условия задачи означают, что:
R = 4 * N, если двоичная запись N содержит чётное число единиц;
R = 4 * N + 2, если двоичная запись N содержит нечётное число единиц.
N = 10 гарантировано даст значение меньше 45 (40 или 42), N = 12 гарантировано даст значение больше 45 (48 или 50), надо проверить только N = 11 (44 или 46):
N = 11₁₀ = 1011₂ => три единицы => R = 11 * 4 + 2 = 46 - ответ получен.
R = 4 * N, если двоичная запись N содержит чётное число единиц;
R = 4 * N + 2, если двоичная запись N содержит нечётное число единиц.
N = 10 гарантировано даст значение меньше 45 (40 или 42), N = 12 гарантировано даст значение больше 45 (48 или 50), надо проверить только N = 11 (44 или 46):
N = 11₁₀ = 1011₂ => три единицы => R = 11 * 4 + 2 = 46 - ответ получен.
#include
#include
#include
using namespace std;
bool result(unsigned n, unsigned x) {
auto r = n
Дмитрий Ганин
Возможно следует решить так:
Вот алгоритм на Python, который вычисляет число R для заданного числа N:
def compute_R(N):
binary_N = bin(N)[2:]
sum_of_digits = sum(int(digit) for digit in binary_N)
binary_N += str(sum_of_digits % 2)
sum_of_digits = sum(int(digit) for digit in binary_N)
binary_N += str(sum_of_digits % 2)
R = int(binary_N, 2)
return R
Теперь мы можем использовать этот алгоритм, чтобы найти наименьшее число N, для которого результат работы алгоритма больше 45. Мы можем сделать это, перебирая все возможные значения N, начиная с 1, и проверяя значение R для каждого из них: N = 1
while True:
R = compute_R(N)
if R > 45:
break
N += 1
print(N)
Если мы запустим этот код, мы увидим, что наименьшее число N, для которого результат работы алгоритма больше 45, равно 23.Не лучше ли такие вопросы задавать в Домашние задания: Информатика?
Похожие вопросы
- Задача по Массивах С++ Дано натуральное число N...
- С++. БЕЗ ИСПОЛЬЗОВАНИЯ АДРЕСОВ И УКАЗАТЕЛЕЙ. Пусть дано натуральное число n и вещественная матрица размером n x 10.
- Язык си Найти все делители натурального числа N и вывести их в порядке возрастания и убывания.
- Заданы натуральное число n и действительные числа a1, a2, …, an. Вычислить
- C++ Дано натуральное число N. Вычислить
- Даны число N и последовательность из N целых чисел. Найти количество и сумму тех чисел, которые нечетны и положительны.
- Си. Цикл for. Что не так? Составить программу вывода на экран всех простых чисел не превосходящих введеннного числа N
- Даны два числа: n и m. Создайте двумерный массив размером n×m и заполните его в соответствии с примером.
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Дано не менее 3-х различных натуральных чисел, за которыми следует 0. Определить 3 наибольших числа в последовательности