Дана последовательность чисел. Разгадайте исходное сообщение: 2246 2056 2460 2379 2858 2305 2240 2855 2134
2421 2344 2460 2043
2030 2381 2055
2310 2344 2055 2307 3106 2416 2376 2414 2022 2112 3100
2310 2344 2055 2274 2042 2272 2184 2050 2022 2013 2047 2410
ответ запишите заглавными буквами без пробелов
ответ: 5533
Проще всего решить данную задачу через программу на питоне:
s = '5' * 72
while '333' in s or '555' in s:
if '555' in s:
s = s.replace('555', '3', 1)
else:
s = s.replace('333', '5', 1)
print(s)
Но, если делать вручную, тогда так:
Возьмём 10 символов из строки, состоящей из 72 идущих подряд цифр 5.
5555555555
Читаем программу: ЕСЛИ нашлось (555) ТО заменить (555, 3)
555 555 555 5
3 3 3 5
Стоит заметить, что у нас получилась строка 3335, но не спешим её заменять на 5, ведь по условию нужно найти все 5 и только если их нет, переходить к else (ИНАЧЕ заменить (333, 5))
Исходя из этого, заменим всю строку по 1 условию (ЕСЛИ нашлось (555) ТО заменить (555, 3)), т.е. просто поделим всё количество на 3.
72 / 3 = 24 без остатка (Это значит, что все пятёрки заменились на тройки)
Итак, остались 24 тройки, запишем 10 символов и посмотрим, что будет:
3333333333
333 333 333 3
5 5 5 3
3 3
Мы видим, что из 9 троек получилась ровно 1, поделим 24 на 9
У нас получится 2 и ещё 6 в остатке, т.е. выглядеть строка будет так:
33 333333
Заменяем на "5"
333 333 33
5 5 33
Это и есть ответ.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int N, line[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
cin >> N;
for (int i = 0; i < pow(2, N); i++) {
for (int j = 0; j < N; j++)
cout << line[j];
if(i!=pow(2, N)-1)
cout << endl;
for (int j = N - 1; j >= 0; j--) {
if (line[j] == 0)
line[j] = 1;
else {
line[j] = 0;
break;
}
}
}
}