4. Найди количество информации во фразе Приехав в Ямало-Ненецкий округ, исследователь увидел фразу на ненецком языке:
Нэрм' тер"
Сколько информации в этой фразе, если современный ненецкий алфавит
содержит 16 символов?
Считай, что каждый символ алфавита кодируется одинаковым минимально возможным
количеством битов. Не забудь учесть пробел, символы «*» и «"» как дополнительные
символы алфавита.
У нас щас кр, сможете
1. Рассмотреть варианты когда в шифре две единицы, а остальные любые цифры. По условию у нас длинна шифра 5, и используем символы 1,2,3,4. Теперь выделяем из длинны 5 два места под единицы, остается длинна 3, в которую нужно поместить все сообщения состоящие из 3 цифр (2,3,4 - т.к. единицу уже использовали) По формуле Q = M в степени K, где Q - сколько сообщений получится, M - количество используемых символов (у нас исп. 2,3,4, т.е. 3 символа), а K - длинна сообщений (мы ищем длину сообщений 3 буквы, т.к. 2 у нас уже заняты единицами) найдем М. М = 3 в степени 3, т.е. М = 27.Получаем, что в одном таком варианте 27 разных сообщений.
2. Выше мы рассмотрели только один вариант, где 2 единицы стояли на двух первых местах, т.е 11ххх, где ххх - это цифры 2.3.4. Чтобы понять сколько таких вариантов существует, используем формулу сочетаний из n по k (в нашем случае из 5 по 2) она равна 5!/2!*(5-2)!=10. Получаем что есть 10 вариантов расстановки 2-х единиц в сообщении длинной 5, можно даже перебрать все 10 вариантов (1. 11ххх 2.1х1хх 3. 1хх1х 4. 1ххх1 5. х11хх 6. хх11х 7. ххх11 8. х1х1х 9. хх1х1 10. 1ххх1)
Подведем итог, 10 вариантов по 27 сообщений - итог 270 сообщений.
#include <algorithm>
using namespace std;
int main()
{
long long int n{ 0 }, z{ 0 };
while (cin >> n) {
size_t ans[120];
for (; n != 0; n = n / 10) {
int tmp = n % 10;
if (n / 10 != 0 || (n / 10 == 0 && n != 9)) {
tmp = min(tmp, 9 - tmp);
}
ans[z++] = tmp;
}
for (int i = z - 1; i >= 0; i--) {
cout << ans[i];
}
cout << endl;
}
return 0;
}