1. Если первый игрок (П) удвоит число камней в первой кучке, то всего будет 4 + 3 + 4 = 11 камней. Если второй игрок (В) добавит в каждую кучку по 2 камня, то всего станет (4 + 2) + (3 + 2) + (4 + 2) = 17 камней => П проиграет при любом своём ходе. Если В удвоит число камней в первой кучке, то будет 8 + 3 + 4 = 15 камней => выиграет П, удвоив число камней в первой кучке (однако это можно расценивать как поддавки). Если В удвоит число камней во второй кучке, то будет 4 + 6 + 4 = 14 камней => П проиграет при любом своём ходе. Если В удвоит число камней в третьей кучке, то будет 4 + 3 + 8 = 15 камней => выиграет П, удвоив число камней в третьей кучке (тоже очевидные поддавки со стороны В).
2. Если П удвоит число камней во второй кучке, то всего будет 2 + 6 + 4 = 12 камней. В, добавив по 2 камня в каждую кучку, получит (2 + 2) + (6 + 2) + (4 + 2) = 20 камней, и тогда П легко сможет выиграть, удвоив число камней во второй кучке или добавив в каждую кучку по 2 камня. Если В удвоит число камней в первой кучке, то всего будет 4 + 6 + 4 = 14 камней => П проиграет при любом своём ходе. Если же В удвоит число камней во второй или третьей кучке, то П выиграет, удвоив число камней в этой же кучке.
3. Если П удвоит число камней в третьей кучке, то всего будет 2 + 3 + 8 = 13 камней. В, удвоив число камней в третьей кучке, получит 2 + 3 + 16 = 21 камень и выиграет, ибо в третьей кучке 16 камней. Однако в таком случае можно сказать, что П поддался, ибо очевидно, что не стоит делать в одной кучке 8 камней.
4. Если П добавит по 2 камня в каждую кучку, то станет (2 + 2) + (3 + 2) + (4 + 2) = 15 камней. Если В удвоит число камней в любой кучке, то П, удвоив в этой же кучке число камней, выиграет. Если В добавит в каждую кучку по 2 камня, то П, также добавив в каждую кучку по 2 камня, выиграет.
Получается, П абсолютно точно выиграет, если добавит по 2 камня в каждую кучку.
// PascalABC.NET 3.2, сборка 1427 от 24.04.2017 // Внимание! Если программа не работает, обновите версию!
begin var m:=ArrRandom(ReadInteger('n='),-20,20); m.Println; (var k,var s):=(0,0); for var i:=1 to m.Length-2 do if (m[i]<m[i-1]) and (m[i]<m[i+1]) then (k,s):=(k+1,s+m[i]); Writeln('Свойство А: кол-во=',k,', сумма=',s); var mb:=m.Where(x->x<0).ToArray; Write('Свойство Б: '); mb.Println; var z:=ReadInteger('Z1='); var mmin:=m.Min; m.Transform(x->x=mmin?z:x); Writeln('Свойство B:'); m.Println; m.Sort; Writeln('Упорядоченность по неубыванию:'); m.Println; var p,q:integer; Write('Введите P Q: '); Read(p,q); m:=m.Where(x->(x mod p<>0) and (x mod q<>0)).ToArray; Writeln('Свойство Г:'); m.Println; z:=ReadInteger('Z2='); p:=m.FindIndex(x->x>=z); if m[p]<>z then m:=(m[:p]+Arr(z)+m[p:]).ToArray; Writeln('После попытки вставки:'); m.Println end.