Два игрока, петя и ваня играют в следующую игру. задан некоторый набор символьных цепочек («слов»), в котором ни одно слово не является началом другого. игра начинается с пустой строки, в конец которой игроки по очереди дописывают буквы, по одной букве за ход так, чтобы полученная цепочка на каждом шаге была началом одного из заданных слов. первый ход делает петя. выигрывает тот, кто первый составит слово из заданного набора. 1. а) определите, у кого из игроков есть выигрышная стратегия для набора слов {бабахкарара, крякряярат}. б) определите, у кого из игроков есть выигрышная стратегия для набора слов {веквек…век, hekhek…hek}. в первом слове 58 раз повторяется слово век, а во втором – 14 раз повторяется слово hek. 2. в наборе слов, в 1а, поменяйте местами две буквы в любом слове так, чтобы выигрышная стратегия была у другого игрока. 3. дан набор слов {голова, горн, горох, профи, проход, продукция}. у кого из игроков есть выигрышная стратегия? выигрышную стратегию.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var w:=ReadlnString.ToWords;
var St:=new Stack <integer>;
var r:=0;
foreach var t in w do
if t[1].IsDigit then St.Push(t.ToInteger)
else begin
var a:=St.Pop;
var b:=St.Pop;
case t[1] of
'+':St.Push(a+b);
'-':St.Push(b-a);
'*':St.Push(a*b)
end;
end;
Writeln(St.Pop)
end.
Контрольный пример
8 9 + 1 7 - *
-102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString('').
MatchValue('(.)\1{2,}').Length);
end.
Контрольный пример
5 2 3 3 3 1
3
// Внимание! Если программа не работает, обновите версию!
begin
var a:=ArrRandom(11,-29,150); a.Println;
Writeln('Ср.арифм. положительных: ',a.Where(x->x>0).Average:0:3);
Writeln('Ср.арифм. отрицательных: ',a.Where(x->x<0).Average:0:3);
Swap(a[1],a[6]);
Writeln('Результирующий массив'); a.Println
end.
Пример
91 109 113 119 17 95 41 131 -15 117 -14
Ср.арифм. положительных: 92.556
Ср.арифм. отрицательных: -14.500
Результирующий массив
91 41 113 119 17 95 109 131 -15 117 -14