Для кодирования некоторой последовательности, состоящей из букв а, б, в, г, д, е, ж, з, и, й. решили
использовать неравномерный двоичный код, удовлетворяющий условию фано. для букв а, б, в, г, д, е, ж,
з, и использовали соответственно кодовые слова 1100, 0010, 1010, , 0111, 1101, 0101, 100, 1
укажите кратчайшее возможное кодовое слово для буквы й, при котором код будет допускать
однозначное декодирование. если таких кодов несколько, укажите код с наименьшим числовым
значением.
и если можно, то с объяснениями и схемой решения
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n(0),m(0);
cin >> n >> m;
int matrix[n][m];
char arr[n][m];
arr[0][0] = '0';
for(int i = 0;i<n;++i){
for(int j = 0;j<m;++j){
cin >> matrix[i][j];
if(!i && !j)continue;
if(!i){
matrix[i][j] += matrix[i][j-1];
arr[i][j] = 'R';
}
if(!j){
matrix[i][j] += matrix[i-1][j];
arr[i][j] = 'D';
}
if(i && j){
matrix[i][j] += max(matrix[i-1][j],matrix[i][j-1]);
if(max(matrix[i-1][j],matrix[i][j-1]) == matrix[i-1][j])arr[i][j] = 'D';
else arr[i][j] = 'R';
}
}
}
cout << matrix[n-1][m-1];
cout << "\n";
string s;
for(int i = n-1;;){
for(int j = m-1;;){
if(arr[i][j] == '0'){
reverse(s.begin(),s.end());
s.erase(0,1);
cout << s << endl;
return 0;
}
s.push_back(arr[i][j]);
s.push_back(' ');
if(arr[i][j] == 'R'){
j -= 1;
continue;
}
if(arr[i][j] == 'D'){
i -= 1;
continue;
}
}
}
cout << endl;
return 0;
}
Объяснение:
var
kurs, summa, rub: double;
begin
readln(kurs, summa);
rub := kurs * summa;
writeln(trunc(rub), ' РУБ ', (frac(rub) * 100):2:0, ' КОП');
end.
Объяснение:
Получаем два числа, затем перемножаем курс на сумму в долларах, чтобы получить рубли и затем выводим в нужном формате.
trunc(a) получает целую часть от числа
frac(a) получает дробную часть от числа, затем умножаем на 100 для преобразования дробной части в целую(для вывода на экран) (например число 0.22 преобразуется в 22.0) и с :2:0 выводим в формате 2 цифры до запятой и 0 после.