Задание 5. Информатика. ЕГЭ. Поляков-146
- Просмотры: 73
- Изменено: 24 ноября 2024
На вход алгоритма подаётся натуральное число \(N\). Алгоритм строит по нему новое число \(R\) следующим образом.
- Строится двоичная запись числа \(N\).
- К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи, и остаток от деления суммы на \(2\) дописывается в конец числа (справа). Например, запись \(11100\) преобразуется в запись \(111001\);
б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на \(2\).
Решение:
C++
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int sum_digits(int N) {
int s = 0;
for(; N; s += N & 1, N>>=1) ;
return s;
}
int R(int N) {
for(int i = 0; i < 2; i++)
N = (N<<1) + sum_digits(N) % 2;
return N;
}
int32_t main() {
vector<int> ans;
for(int N = 1; N < 1000; N++)
{
int tmp = R(N);
if(tmp > 180)
ans.push_back(tmp);
}
cout << *min_element(ans.begin(), ans.end()) << '\n';
}
Ответ: \(184\)