Информационный объем сообщения длиной в 204 символа составляет 51 байт определите, из какго максимального количества символов может состоять алфавит языка, на котоом написано данное сообщение
Задача достаточно интересная, получил удовольствие от решения. Шестнадцатиричное число, занимающее два разряда, может рассматриваться как две тетрады двоичных чисел. Пронумеруем разряды слева направо, тогда можно представить двухзначное 16-ричное число следующим набором битов:
Индексы, кроме положения бита, показывают степень двойки, на которую надо умножить бит, чтобы перейти к десятичному эквиваленту шестнадцатиричной цифры, т.е. старшая цифра в десятичной системе запишется как
Умножение числа на 2 в двоичной системе эквивалентно его сдвигу влево на один разряд. При этом старший разряд старшей тетрады должен перейти в новую, третью тетраду или он будет утерян. Но по условию, после умножения число по-прежнему имеет два разряда, следовательно мы должны потерять старший разряд безболезненно, а это возможно только если он нулевой. Тогда первоначальное число должно быть записано как
а после удвоения его запись примет вид
Запишем сумму цифр исходного числа p1:
Теперь запишем сумму удвоенного числа p2:
По условию эти две суммы равны и мы составляем уравнение:
Полученное уравнение решается на множестве двоичных чисел. Поскольку исходное число двузначное, по крайней мере в старшем разряде оно содержит цифру, отличную от нуля. Следовательно, b3 не может равняться нулю и остается только положить b3=1. Тогда уравнение (1) примет следующий вид:
Учитывая, что каждый бит может принимать значения только 0 и 1, мы должны найти такие комбинации бит, которые дадут в сумме 7=4+2+1, потому что у нас в уравнении только такие коэффициенты. Сгруппируем члены в (2):
Полученная система уравнений будет иметь 7 вариантов решений (вариант a2=a1=a0=0 исключается в силу необходимости наличия цифры в старшем разряде), которым в старшем разряде будут соответствовать цифры от 001(2) до 111(2) или от 1(10) до 7(10).
ответ: 7
Замечание: Из (3) можно легко найти числа, которые соответствуют заданным условиям: 30, 45, 60, 75, 90, 105, 120 (все в десятичной системе счисления). В 16-ричной системе они запишутся как 1E, 2D, 3C, 4B, 5A, 69, 78.
В приложении дана блок-схема с алгоритмом, вычисляющим значение функции F по рекуррентной схеме. Ниже приводится запись программы на языке Pascal, содержащая две функции - рекуррентную F (строго в соответствии с алгоритмом) и рекурсивную Fr. Вывод иллюстрирует работу программы для значения аргумента n=6
function F(n: integer): integer; {рекуррентная} var i, p: integer; fn1, fn2: integer;
begin case n of 1: Result := 1; 2: Result := 2; else begin fn2 := 1; fn1 := 2; for i := 3 to n do begin p := 2 * fn1 + (i - 2) * fn2; fn2 := fn1; fn1 := p end; Result := p end end end;
function Fr(n: integer): integer; {рекурсивная - оцените изящество рекурсии!} begin case n of 1: Result := 1; 2: Result := 2; else Result := 2 * Fr(n - 1) + (n - 2) * Fr(n - 2) end end;
Шестнадцатиричное число, занимающее два разряда, может рассматриваться как две тетрады двоичных чисел. Пронумеруем разряды слева направо, тогда можно представить двухзначное 16-ричное число следующим набором битов:
Индексы, кроме положения бита, показывают степень двойки, на которую надо умножить бит, чтобы перейти к десятичному эквиваленту шестнадцатиричной цифры, т.е. старшая цифра в десятичной системе запишется как
Умножение числа на 2 в двоичной системе эквивалентно его сдвигу влево на один разряд. При этом старший разряд старшей тетрады должен перейти в новую, третью тетраду или он будет утерян. Но по условию, после умножения число по-прежнему имеет два разряда, следовательно мы должны потерять старший разряд безболезненно, а это возможно только если он нулевой.
Тогда первоначальное число должно быть записано как
а после удвоения его запись примет вид
Запишем сумму цифр исходного числа p1:
Теперь запишем сумму удвоенного числа p2:
По условию эти две суммы равны и мы составляем уравнение:
Полученное уравнение решается на множестве двоичных чисел.
Поскольку исходное число двузначное, по крайней мере в старшем разряде оно содержит цифру, отличную от нуля. Следовательно, b3 не может равняться нулю и остается только положить b3=1. Тогда уравнение (1) примет следующий вид:
Учитывая, что каждый бит может принимать значения только 0 и 1, мы должны найти такие комбинации бит, которые дадут в сумме 7=4+2+1, потому что у нас в уравнении только такие коэффициенты. Сгруппируем члены в (2):
Полученная система уравнений будет иметь 7 вариантов решений (вариант a2=a1=a0=0 исключается в силу необходимости наличия цифры в старшем разряде), которым в старшем разряде будут соответствовать цифры от 001(2) до 111(2) или от 1(10) до 7(10).
ответ: 7
Замечание: Из (3) можно легко найти числа, которые соответствуют заданным условиям: 30, 45, 60, 75, 90, 105, 120 (все в десятичной системе счисления). В 16-ричной системе они запишутся как 1E, 2D, 3C, 4B, 5A, 69, 78.
Ниже приводится запись программы на языке Pascal, содержащая две функции - рекуррентную F (строго в соответствии с алгоритмом) и рекурсивную Fr.
Вывод иллюстрирует работу программы для значения аргумента n=6
function F(n: integer): integer;
{рекуррентная}
var
i, p: integer;
fn1, fn2: integer;
begin
case n of
1: Result := 1;
2: Result := 2;
else
begin
fn2 := 1;
fn1 := 2;
for i := 3 to n do
begin
p := 2 * fn1 + (i - 2) * fn2;
fn2 := fn1;
fn1 := p
end;
Result := p
end
end
end;
function Fr(n: integer): integer;
{рекурсивная - оцените изящество рекурсии!}
begin
case n of
1: Result := 1;
2: Result := 2;
else Result := 2 * Fr(n - 1) + (n - 2) * Fr(n - 2)
end
end;
begin
writeln(F(6), ' ', Fr(6))
end.
Тестовое решение:
142 142
ответ: значение функции F(6) равно 142.