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.
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 камня в каждую кучку.
Надеюсь, я нигде не напутала.
// Внимание! Если программа не работает, обновите версию!
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.
Пример
n= 17
3 5 -5 12 -15 6 11 -7 -13 -3 -17 8 -7 8 -5 -15 -7
Свойство А: кол-во=6, сумма=-72
Свойство Б: -5 -15 -7 -13 -3 -17 -7 -5 -15 -7
Z1= -33
Свойство B:
3 5 -5 12 -15 6 11 -7 -13 -3 -33 8 -7 8 -5 -15 -7
Упорядоченность по неубыванию:
-33 -15 -15 -13 -7 -7 -7 -5 -5 -3 3 5 6 8 8 11 12
Введите P Q: 3 7
Свойство Г:
-13 -5 -5 5 8 8 11
Z2= 0
После попытки вставки:
-13 -5 -5 0 5 8 8 11