Для кодирования некоторой последовательности, состоящей из букв А,В, С и D, используется неравномерный двоичный код, позволяющий однозначно декодировать полученную двоичную последовательность. Вот этот код: А-1101, В-100, С-000 и D-111. Можно ли сократить для одной или нескольких букв длину кодового слова, удалив в нем один или несколько последних символов, что бы код по-прежнему можно декодировать однозначно?
type arr=array[1..k] of integer;
procedure p1(var x:arr);
var i:integer;
begin
for i:=1 to k do
begin
x[i]:=random(30)-15;
write(x[i]:3);
end;
writeln;
end;
function f1(var x:arr):integer;
var i,s:integer;
begin
s:=0;
for i:=1 to k do
if x[i]<0 then s:=s+x[i]*x[i];
f1:=s;
end;
var a,b:arr; m,n:integer; x:real;
begin
writeln('a:');
p1(a);
writeln('b:');
p1(b);
m:=f1(a);
n:=f1(b);
writeln('m = ',m,' n = ',n);
x:=m/(n-m);
writeln('x = ',x:6:4);
end.
Пример:
a:
-13 7-11 11 -3 4 13 3 -1 2
b:
8 -2 5 10 9 8 -8 12 7-13
m = 300 n = 237
x = -4.7619
В 4-ричной системе = 30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333300000
Кол-во цифр 3 = 496
код на руби
def countNumberInExpression(expression, p_base, c_number)
puts "Результат вычисления выражения = #{expression}"
puts "В #{p_base}-ричной системе = #{r = expression.to_s(p_base)}"
count = r.scan(/#{c_number}/u).size
puts "Кол-во цифр #{c_number} = #{count = r.scan(/#{c_number}/u).size}"
return count
end