// 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.
Поделитесь своими знаниями, ответьте на вопрос:
Алгоритма «не могу» и « не понимаю «
// Работает под Pascal ABC.NET
// Заводим переменные
var
// Нужно n типа целое для того, чтобы хранить ввод пользователя
n: Integer;
// По условию задачи необходим массив. Тк N <= 20, то заводим от 1 до 20.
// В массиве будут храниться целые поэтому Integer
a: Array [1 .. 20] of Integer;
// Также нам понадобится счетчик, указывающий на обрабатываемый элемент массива
i: Integer;
begin
// Считываем n с клавиатуры
ReadLn(n);
// Пусть первый элемент равен 1
a[1] := 1;
// Каждый последующий элемент массива
for i := 2 to n do
// Равен предыдущему элементу массива умноженному на 2
a[i] := a[i-1] * 2;
// Вывод каждого элемента массива через пробел
for i := 1 to n do
Write(a[i], ' ');
end.