Запишем условие задачи:
Поскольку в сообщениях одинаковое количество символов, то К1=К2. Соотношение количества информации можно записать как I1=1.5*I2. Общее кол-во символов в алфавите обозначается буквой N, по условию N1<=10, N2<=10.
Решение: I1=K1*i1; I2=K2*i2; Подставим в условие I1=1.5*I2 значения I1 и I2. Получаем K1*i1=1.5*K2*i2
Сократим в обеих частях уравнения К1 и К2, у нас останется
i1=1.5*i2
По условию мощности обоих алфавитов не превышают число 10, запишем это так
10>=2 в степени i1
10>=2 в степени i2
Предположим, что i2=1 бит, тогда i1=1.5 бита (а это противоречит условию)
Предположим, что i2=2 бита, тогда i1=3 бита -это и есть ответ задачи
#include <stdio.h>
#include <iostream>
#include <locale.h>
#include <ctime>
int main() {
setlocale(LC_ALL, "rus");
system("chcp 1251");
const int SIZE = 256;
int i, j, ch;
char str[SIZE];
std::cout << "Your string, please" << std::endl;
for (i = 0; i < SIZE - 1 && (ch = getchar()) != -1 && ch != '\n'; i++) {
str[i] = ch;
}
std::cout << "Изначальная строка:\n" << str << "\n\n" << std::endl;
for (i = 0; i < SIZE - 1; i++) {
if (str[i] == '.') {
if (str[i + 1] == '.' && str[i + 2] == '.') {
i += 2;
continue;
}
else {
for (j = SIZE - 3; j > i; j--) {
str[j + 2] = str[j];
}
str[i + 1] = '.';
str[i + 2] = '.';
i += 2;
}
}
}
std::cout << "Измененная строка:\n" << str << "\n\n" << std::endl;
return 0;
}