#include <iostream>
using namespace std;
void arithmeticProgression(const int& first, const int& differense, const int& N){
// first - первый номер арифметической прогрессии
// difference - разность
// N - число, до которого продолжать прогрессию
static int sum = 0; // тут будет сумма
static int callsNumber = 0; // считаем число вызовов функции для определения номера элемента последовательности
int next = first + differense; // следующий элемент прогрессии
sum += first; // подсчет суммы
if(callsNumber == N){
cout << "finally item: " << first << endl;
cout << "sum: " << sum << endl;
sum = 0;
callsNumber = 0;
return; // если следующий элемент идет по порядку больше N, то прервать рекурсию
}
else{
callsNumber++;
arithmeticProgression(next, differense, N); // иначе делать тоже самое со следующим числом прогрессии
}
}
int main(){
arithmeticProgression(2, 3, 3); // пример вызова
return 0;
}
Запишем условие задачи:
Поскольку в сообщениях одинаковое количество символов, то К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 бита -это и есть ответ задачи
24000000000 бит (гигабайт)
152000000 бит (мегабайт)
1032000 бит (килобайт)
Ответ:
10234 * 157 = 1606738
1606738/8=200842 (остаток 2
)
200842/8=25105 (остаток 2
)
25105/8=3138 (остаток 1
)
3138/8=392 (остаток 2
)
392/8=49 (остаток 0
)
49/8=6 (остаток 1
)
6/8=0 (остаток 6)
1606738 (10) = 6102122 (8)
Код программы
procedure F(n: integer);
begin
if n > 0 then
begin
writeln('*');
F(n - 1);
F(n div 3)
end
end;
begin
f(6);
end.
вывод
*
*
*
*
*
*
*
*
*
*
*