Пожалуйста,помогите,информатика 11 класс)
1. Исполнитель Калькулятор имеет следующую систему команд:
1) прибавь 1;
2) умножь на 2.
С помощью первой из них исполнитель увеличивает число на экране на 2, с помощью второй — в 2 раза.
1) Выясните, сколько разных программ, преобразующих число 1 в число 20, можно составить для этого исполнителя.
2) Сколько среди них таких программ, у которых в качестве промежуточного результата обязательно получается число 15?
3) Сколько среди них таких программ, у которых в качестве промежуточного результата никогда не получается число 12?
Ответы
// Pascal ABC.NET
var
ans1, ans2, ans3: Integer;
procedure rec1(k: Integer);
begin
if k < 1 then
exit;
if k = 1 then begin
Inc(ans1);
exit;
end;
if k mod 2 = 0 then
rec1(k div 2);
rec1(k-1);
end;
procedure rec2(k: Integer; visited: Boolean);
begin
if k < 1 then
exit;
if (k = 1) and visited then begin
Inc(ans2);
exit;
end;
if k mod 2 = 0 then
rec2(k div 2, visited or (k = 15));
rec2(k-1, visited or (k = 15));
end;
procedure rec3(k: Integer);
begin
if (k < 1) or (k = 12) then
exit;
if k = 1 then begin
Inc(ans3);
exit;
end;
if k mod 2 = 0 then
rec3(k div 2);
rec3(k-1);
end;
begin
ans1 := 0;
ans2 := 0;
ans3 := 0;
rec1(20);
rec2(20, false);
rec3(20);
WriteLn('Ответ на подзадачу 1: ', ans1);
WriteLn('Ответ на подзадачу 2: ', ans2);
WriteLn('Ответ на подзадачу 3: ', ans3);
end.