При перекодирование информации сообщения из 2-байтовой кодировки в 8-битовую кодировку оно уменьшилось на 2048 бит. Определите информационный объём исходного сообщения. 1) 4096 байт; 2) 512 байт; 3) 2048 бит; 4) 68 Кбайта.
#include <iostream>using namespace std; //Функция возвращает минимальное возможное число,//Состоящее из цифр числа aint min(int a) { //Массив для подсчета цифр в числе int *k = new int[10]; for (int i = 0; i < 10; i++) k[i] = 0; //Считаем, сколько раз повторяется каждая цифра в числе for (; a; a /= 10) { int t = a % 10; //Если цифра не 0 if (t) k[t]++; } //Переменная для результата int rez = 0; //Множиель разряда int multiplier = 10; //Идем по массиву в обратном порядке for (int i = 9; i > 0; i--) //Если данная цифра есть в массиве (числе) for (; k[i]; k[i]--) { //Дописываем цифру в результат rez += i * multiplier * 0.1; //Увеличиваем множитель, для перехода к следующему разряду multiplier *= 10; } //Удаление массива delete[] k; return rez;}
void main(){ //Входные данные int n; printf("\n << n = "); scanf("%d",&n); //Вывод результата printf("\n >> min = %d", min(n)); system("pause>>void");}
Заметим, чтобы сгенерировать строку, нужно знать только предыдущую строку. Будет генерировать по порядку от 1 до n-ой строки.
Программа:
var n, i: integer; cur_str, prev_str: string; begin read(n); prev_str := ''; for i := 1 to n do {Генерируем строки по порядку от 1 до n} begin str(i, cur_str); {Записываем в текущую строку её порядковый номер} cur_str := prev_str + prev_str + cur_str; {Дописываем предыдущую строку два раза в начало} prev_str := cur_str; {Записываем текущею строку вместо предудущей} end; writeln(cur_str); end.
2) 512 байт.
Объяснение:
2 байта = 16 бит. 16/8 = 2, при перекодировании размер уменьшается в 2 разаБ значит 2048*2 = 4096 - исходный размер информации. 4096/8 = 512 байт.