//длинная арифметика
begin
var a := '123456789123456789';//ReadString();
var b := '123456789123456789123';//...
var l := Abs(a.Length - b.Length);
var source := l*'0';
if a.Length > b.Length then
insert(source, b, 1)
else
insert(source, a, 1);
var s := '';
var mem := 0;
for var i:=a.Length downto 1 do
begin
var c := a[i].ToDigit + b[i].ToDigit + mem;
mem := c div 10;
insert((c mod 10).ToString, s, 1)
end;
if (mem > 0) then insert('1', s, 1);
s.Println;
end.
ответ:Дерево игры - в прилагаемом файле. У игрока, делающего ход первым (Пети) есть выигрышная стратегия: первый ход должен быть +3 (в куче получится 13 камней). В этом случае при ходе второго игрока (Вани) +3 (в куче 16 камней) первый (Петя) выигрывает ходом *2 (в куче 32 камня); при ходе второго игрока (Вани) *2 (в куче 26 камней) первый (Петя) также выигрывает ходом *2 (в куче 52 камня). Второй игрок (Ваня) может выиграть только в случае, если первый (Петя) сделает начальный ход *2 (в куче 20 камней), следующий ход (Вани) *2 (в куче 40 камней) приводит к выигрышу.
var i,n,s: integer;
a: array[1..m] of integer;
begin
write('размер массива: '); readln(n);
randomize;
s:=0;
writeln('исходный массив: ');
for i:=1 to n do
begin
a[i]:=random(-50,50);
write(a[i],' ');
s:=s+a[i];
end;
writeln;
writeln('сумма элементов: ',s);
end.
размер массива: 15
исходный массив:
20 -20 8 -8 25 42 1 38 -31 17 30 2 -6 -43 35
сумма элементов: 110