//PascalABC.NET версия 3.2, сборка 1389 //Если программа не запускается, то обновите версию uses System.Linq; begin begin writeln('I'); var n := ReadInteger('n='); Writeln((1 + 1 + Power(2, n - 1)) * n / 2); end;
begin writeln; writeln('II'); var n := ReadInteger('n='); Writeln(n mod 11 = 0 ? 'YES' : 'NO');
end;
begin writeln; writeln('III'); var a := ReadArrInteger('Документы', ReadInteger('n=')).ToList; writeln;
while a.Any() do begin write(a[0], ' '); a.RemoveAt(0); if not a.Any then break;
write(a.Last, ' '); a.RemoveAt(a.Count - 1); if not a.Any then break;
var n := 0; if a.Count > 1 then n := a.Count div 2 - 1; write(a[n], ' '); a.RemoveAt(n); end; end; end.
Все удачные наборы команд должны включать остановку на отметке 12 футов. На отметку 1 фут робот может попасть с одной команды A; на отметку 2 фута - с команд AA и B (всего 2 набора команд); на отметку 3 фута - с команд AAA, AB, BA и C (4 набора). Так как за одну команду робот может переместиться на 1, 2 или 3 фута, то для подсчета количества наборов команд, позволяющих роботу попасть на отметки N > 3, можно использовать формулу K(N) = K(N-1)+K(N-2)+K(N-3). Напимер, на отметку 4 фута робот может попасть с отметок 3, 2 или 1 фут, следовательно, количество попасть на отметку 4 определяется как K(3)+K(2)+K(1). K(4) = K(3)+K(2)+K(1) = 4+2+1 = 7 K(5) = K(4)+K(3)+K(2) = 7+4+2 = 13 K(6) = K(5)+K(4)+K(3) = 13+7+4 = 24 K(7) = K(6)+K(5)+K(4) = 24+13+7 = 44 K(8) = K(7)+K(6)+K(5) = 44+24+13 = 81 K(9) = K(8)+K(7)+K(6) = 81+44+24 = 149 K(10) = K(9)+K(8)+K(7) = 149+81+44 = 274 K(11) = K(10)+K(9)+K(8) = 274+149+81 = 504 K(12) = K(11)+K(10)+K(9) = 504+274+149 = 927 Так как вторая часть пути робота также имеет длину 12, то общее количество удачных наборов команд = 927*927 = 859 329
//Если программа не запускается, то обновите версию
uses System.Linq;
begin
begin
writeln('I');
var n := ReadInteger('n=');
Writeln((1 + 1 + Power(2, n - 1)) * n / 2);
end;
begin
writeln;
writeln('II');
var n := ReadInteger('n=');
Writeln(n mod 11 = 0 ? 'YES' : 'NO');
end;
begin
writeln;
writeln('III');
var a := ReadArrInteger('Документы', ReadInteger('n=')).ToList;
writeln;
while a.Any() do
begin
write(a[0], ' ');
a.RemoveAt(0);
if not a.Any then break;
write(a.Last, ' ');
a.RemoveAt(a.Count - 1);
if not a.Any then break;
var n := 0;
if a.Count > 1 then n := a.Count div 2 - 1;
write(a[n], ' ');
a.RemoveAt(n);
end;
end;
end.