В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
murad2097
murad2097
14.06.2020 03:03 •  Информатика

Два игрока, петя и ваня играют в следующую игру. задан некоторый набор символьных цепочек («слов»), в котором ни одно слово не является началом другого. игра начинается с пустой строки, в конец которой игроки по очереди дописывают буквы, по одной букве за ход так, чтобы полученная цепочка на каждом шаге была началом одного из заданных слов. первый ход делает петя. выигрывает тот, кто первый составит слово из заданного набора. 1. а) определите, у кого из игроков есть выигрышная стратегия для набора слов {бабахкарара, крякряярат}. б) определите, у кого из игроков есть выигрышная стратегия для набора слов {веквек…век, hekhek…hek}. в первом слове 58 раз повторяется слово век, а во втором – 14 раз повторяется слово hek. 2. в наборе слов, в 1а, поменяйте местами две буквы в любом слове так, чтобы выигрышная стратегия была у другого игрока. 3. дан набор слов {голова, горн, горох, профи, проход, продукция}. у кого из игроков есть выигрышная стратегия? выигрышную стратегию.

Показать ответ
Ответ:
Makarzzz
Makarzzz
22.04.2020 22:50
1. Задача решается с стека (алгоритм Дейкстры для обработки обратной польской записи). Предполагается, что во вводимой строке содержится корректное выражение, удовлетворяющее условиям задания.

// 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
0,0(0 оценок)
Ответ:
VikaSh86
VikaSh86
19.04.2020 14:16
// PascalABC.NET 3.3, сборка 1570 от 04.11.2017
// Внимание! Если программа не работает, обновите версию!

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
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота