Была задачка такая в школе у нас на одной важной работе. Про пещеры и клад. К ней нужно было применить алфавитный подход... <<Известно, что ровно в двух пещерах из пяти есть клады. Сколько битов нужно, чтобы закодировать информацию о расположении кладов?>> Если задачу решать традиционно, как на первый взгляд кажется - изящно, то ответ получится примерно таков: 1 2 3 4 5 0 1 0 0 1 Итого: 5 битов.
Мы же говорим о рациональном подходе. Всего 5 пещер. В двух клады. Сколько вариантов расположения кладов существует? 1 2 3 4 5 1-2,1-3,1-4,1-5,2-3,2-4,2-5,3-4,3-5,4-5 Итого: 10 вариантов - вот тебе и алфавит. Можешь пронумеровать варианты(0, 1,2,3...) и информацию хранить будешь в скольки битах? 10=2^i 2^3=8(10 сюда не входит) 2^4=16(10 входит. Пусть будет немного лишней информации, зато она не потеряется.) Получаем 4 бита.
1) Program n1; var n,i:integer; t:array[1..100] of real; a,b:real; begin readln(n); readln(a); readln(b); for i:=1 to n do begin t[i]:=(b-a)/n; write(t[i],' '); end; end. 2) Program n1; var a:array[1..100] of integer; n,i:integer; k:real; begin read(n); k:=0; for i:=1 to n do read(a[i]); for i:=1 to n do if a[i] mod 2 <> 0 then k:=k+1; writeln; writeln('кол-во нечет. чисел равно ',k,''); end. 6) Program n1; var a:array[1..100] of real; i,n:integer; s,sr:real; begin read(n); for i:=1 to n do read(a[i]); s:=0; sr:=0; for i:=1 to n do s:=s+a[i]; sr:=s/n; writeln('сред. арифметическое равно ',sr,''); end. 7) Program n1; var a:array[1..100] of real; i,n:integer; min,max:real; begin read(n); for i:=1 to n do read(a[i]); min:=a[1]; for i:=2 to n do if a[i]<min then min:=a[i]; max:=a[1]; for i:=2 to n do if a[i]>max then max:=a[i]; writeln('максимальный элемент равен ',max,''); writeln('минимальный элемент равен ',min,''); end. 8) Program n1; var a:array[1..100] of real; i,n:integer; min,max,nom1,nom2:real; begin read(n); for i:=1 to n do read(a[i]); min:=a[1]; nom1:=1; for i:=2 to n do if a[i]<min then begin min:=a[i]; nom1:=i; end; max:=a[1]; nom2:=1; for i:=2 to n do if a[i]>max then begin max:=a[i]; nom2:=i; end; writeln('максимальный элемент равен ',max,', его номер ',nom2,''); writeln('минимальный элемент равен ',min,', его номер ',nom1,''); end. 9) Program n1; var a:array[1..100] of real; i,n:integer; min,max,s,sr:real; begin read(n); randomize; for i:=1 to n do begin a[i]:=random(100)+1; write(a[i],' '); end; writeln; s:=0; sr:=0; for i:=1 to n do s:=s+a[i]; sr:=s/n; writeln('ср. арифм. = ',sr,''); min:=a[1]; for i:=2 to n do if a[i]<min then min:=a[i]; max:=a[1]; for i:=2 to n do if a[i]>max then max:=a[i]; writeln('максимальный элемент равен ',max,''); writeln('минимальный элемент равен ',min,''); end.
<<Известно, что ровно в двух пещерах из пяти есть клады. Сколько битов нужно, чтобы закодировать информацию о расположении кладов?>>
Если задачу решать традиционно, как на первый взгляд кажется - изящно, то ответ получится примерно таков:
1 2 3 4 5
0 1 0 0 1
Итого: 5 битов.
Мы же говорим о рациональном подходе. Всего 5 пещер. В двух клады. Сколько вариантов расположения кладов существует?
1 2 3 4 5
1-2,1-3,1-4,1-5,2-3,2-4,2-5,3-4,3-5,4-5
Итого: 10 вариантов - вот тебе и алфавит. Можешь пронумеровать варианты(0, 1,2,3...) и информацию хранить будешь в скольки битах?
10=2^i
2^3=8(10 сюда не входит)
2^4=16(10 входит. Пусть будет немного лишней информации, зато она не потеряется.)
Получаем 4 бита.
var n,i:integer;
t:array[1..100] of real;
a,b:real;
begin
readln(n);
readln(a);
readln(b);
for i:=1 to n do
begin
t[i]:=(b-a)/n;
write(t[i],' ');
end;
end.
2) Program n1;
var a:array[1..100] of integer;
n,i:integer;
k:real;
begin
read(n);
k:=0;
for i:=1 to n do
read(a[i]);
for i:=1 to n do
if a[i] mod 2 <> 0 then
k:=k+1;
writeln;
writeln('кол-во нечет. чисел равно ',k,'');
end.
6) Program n1;
var a:array[1..100] of real;
i,n:integer;
s,sr:real;
begin
read(n);
for i:=1 to n do
read(a[i]);
s:=0;
sr:=0;
for i:=1 to n do
s:=s+a[i];
sr:=s/n;
writeln('сред. арифметическое равно ',sr,'');
end.
7) Program n1;
var a:array[1..100] of real;
i,n:integer;
min,max:real;
begin
read(n);
for i:=1 to n do
read(a[i]);
min:=a[1];
for i:=2 to n do
if a[i]<min then
min:=a[i];
max:=a[1];
for i:=2 to n do
if a[i]>max then
max:=a[i];
writeln('максимальный элемент равен ',max,'');
writeln('минимальный элемент равен ',min,'');
end.
8) Program n1; var a:array[1..100] of real; i,n:integer; min,max,nom1,nom2:real; begin read(n); for i:=1 to n do read(a[i]); min:=a[1]; nom1:=1; for i:=2 to n do if a[i]<min then begin min:=a[i]; nom1:=i; end; max:=a[1]; nom2:=1; for i:=2 to n do if a[i]>max then begin max:=a[i]; nom2:=i; end; writeln('максимальный элемент равен ',max,', его номер ',nom2,''); writeln('минимальный элемент равен ',min,', его номер ',nom1,''); end.
9) Program n1; var a:array[1..100] of real; i,n:integer; min,max,s,sr:real; begin read(n); randomize; for i:=1 to n do begin a[i]:=random(100)+1; write(a[i],' '); end; writeln; s:=0; sr:=0; for i:=1 to n do s:=s+a[i]; sr:=s/n; writeln('ср. арифм. = ',sr,''); min:=a[1]; for i:=2 to n do if a[i]<min then min:=a[i]; max:=a[1]; for i:=2 to n do if a[i]>max then max:=a[i]; writeln('максимальный элемент равен ',max,''); writeln('минимальный элемент равен ',min,''); end.