Месяц находим методом половинного деления.
Двоичная запись числа 366 размещается в 9 битах (в 8 битах размещается только 256 чисел , а в 9 битах - уже 512).
То есть , понадобится задать 8 вопросов и девятой фразой будет ответ.
В году 365 (366) дней. Пусть 366, для 365 рассуждение то же.
Рассмотрим самый худший вариант
Середина года - день номер 366/2=183. Это 1 июля.
Первый вопрос: День рождения в первой половине года?
Допустим, да.
Второй вопрос: День рождения в первом квартале?
Допустим, нет. Следовательно во втором.
Второй квартал - это дни с номерами от 92 до 182. Середина - среднее арифметическое. (92+182)/2=137. Это дата 17 мая.
Третий вопрос: День рождения позднее 17 мая?
Допустим, нет.
Следовательно, интервал дат 1 апреля - 17 мая, 91 день. Опять делим на 2, сужая интервал до 22 дней. Это дата 22 апреля.
Четвертый вопрос: День рождения позднее 22 апреля?
Допустим, нет.
Новый диапазон поиска - 23 апреля - 17 мая. Половиним его.
Пятый вопрос: День рождения позднее 29 апреля?
Допустим, нет.
Поиск сузился до 23 - 29 апреля. Снова берем половину.
Шестой вопрос: День рождения позднее 26 апреля?
Допустим, нет.
Интервал дат 23-26 апреля. Половиним.
Седьмой вопрос: День рождения позднее 24 апреля?
Допустим, да.
Интервал дат 25-26 апреля.
Восьмой вопрос: День рождения 25 апреля?
Допустим, нет
Девятая фраза: Ваш день рождения 26 апреля.
1)
var
a, b, s : real;
begin
read (a, b);
s := a * b;
write (s:10:4);
end.
2)
var
a, b, c, k : integer;
begin
read (a, b, c);
k := 0;
if a > 0 then inc (k);
if b > 0 then inc (k);
if c > 0 then inc (k);
writeln (k);
end.
3)
var
a : integer;
begin
read (a);
writeln ((a mod 10) * (a mod 100 div 10) * (a div 100 mod 10) * (a div 1000));
end.
4)
var
c, n : integer;
begin
read (n);
c := 0;
repeat
inc (c);
n := n div 10;
until n = 0;
writeln (c);
end.
5)
var
n, sum, i : integer;
begin
read (n);
sum := 0;
for i := 1 to n do
sum := sum + i;
writeln (sum);
end.
6)
var
d, n, k : integer;
begin
read (n, k);
d := 0;
while n >= k do
begin
d := d + 1;
n := n - k;
end;
writeln ('n div k = ', d);
writeln ('n mod k = ', n);
end.
7)
var
n, sum, i, tmp : integer;
begin
read (n);
sum := 0;
for i := 1 to n do
begin
read (tmp);
sum := sum + tmp;
end;
writeln (sum / n);
end.
8)
var
i, n, s : integer;
a : array [1..1000] of integer;
begin
s := 2;
read (n);
for i := 1 to n do
begin
a[i] := s;
s := s + 2 * i + 1;
end;
for i := 1 to n do write (a[i], ' ');
end.
9)
var
n, i, count, tmp : integer;
begin
read (n);
count := 0;
for i := 1 to n do
begin
read (tmp);
if tmp < 0 then inc (count);
end;
writeln (count);
end.
10)
var
n, i, j : integer;
begin
read (n);
for i := 1 to n do
begin
for j := 1 to i do
write ('*');
writeln;
end;
end.
11) //Не понял, как заполняется массив? Тут рандом
var
a : array [1..1000] of integer;
i, n : integer;
begin
read (n);
for i := 1 to n do
a[i] := trunc (random (1000)) - 500;
for i := 1 to n do
if a[i] > 0 then a[i] := a[i] * (-1)
else if a[i] < 0 then a[i] := sqr (a[i]);
for i := 1 to n do
write (a[i], ' ');
end.
12)
var
n, i, count : integer;
begin
read (n);
count := 0;
for i := 1 to n do
if n mod i = 0 then inc (count);
writeln (count);
end.