var
a : array [1..100] of real;
n, i : integer;
begin
read (n);
for i := 1 to n do read (a[i]);
for i := 1 to n do
if a[i] <= 0 then
begin
writeln ('NO');
readln;
Halt;
end;
writeln ('YES');
readln;
end.
var
a : array [1..100] of real;
n, i : integer;
o : real;
begin
read (n);
for i := 1 to n do read (a[i]);
o := a[1];
for i := 2 to n do
if a[i] <> o then
begin
writeln ('NO');
readln;
Halt;
end;
writeln ('YES');
readln;
end.
var
a : array [1..100] of real;
n, i : integer;
x : real;
begin
read (n);
for i := 1 to n do read (a[i]);
read (x);
for i := 1 to n do
if a[i] = x then
begin
writeln ('YES');
readln;
Halt;
end;
writeln ('NO');
readln;
end.
Самая оптимальная стратегия угадывания - дихотомия, то есть деление отрезка пополам и задавание вопроса больше? (или меньше?)
Например, загадано 50
Последовательность
32 64/2 больше
48 (32+64)/2 больше
56 (48+64)/2 меньше
52 (48+56)/2 меньше
50 (48+52)/2 попал
Теперь о задаче. Вопрос очень некорректный, если бы он звучал, как сколько попыток нужно сделать, чтобы угадать? , то решение простое
64 = 2^6, поэтому нужно 6 попыток 6 = 110b, значит 3 бит достаточно, чтобы в них разместить это количество попыток.
НО в задаче вопрос-то другой! Потому что в процессе отгадывания на каждом шаге нужно знать 1. Концы отрезка, 2. ответ
Концы это 6 бит и 6 бит +ответ 1 бит, итого 13 бит на шаг *6 = 78 бит. Можно ещё сократить немного, так как в последующем вопросе используется информация из предыдущего(один из концов интервала).
Уточни, что имеется в виду под фразой "какое количество информации", иначе задача неопределена и допускает многочисленные толкования.
// Внимание! Если программа не работает, обновите версию!
begin
var a,b:integer;
var h:real;
Write('Введите a,b,h: '); Read(a,b,h);
var x:=real(a);
while x<=b do begin
Writeln(x,' ',x*x);
x:=x+h
end;
end.
Пример
Введите a,b,h: 10 20 0.5
10 100
10.5 110.25
11 121
11.5 132.25
12 144
12.5 156.25
13 169
13.5 182.25
14 196
14.5 210.25
15 225
15.5 240.25
16 256
16.5 272.25
17 289
17.5 306.25
18 324
18.5 342.25
19 361
19.5 380.25
20 400