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

Программирование 98 , паскаль/c++/в крайнем случае python 1.в постфиксной записи (или обратной польской записи) операция записывается после двух операндов. например, сумма двух чисел a и b записывается как a b +. запись b c + d * обозначает привычное нам (b + c) * d, а запись a b c + d * + означает a + (b + c) * d. достоинство постфиксной записи в том, что она не требует скобок и дополнительных соглашений о приоритете операторов для своего чтения. входные данные в единственной строке записано выражение в постфиксной записи, содержащее однозначные числа и операции +, -, *. выходные данные необходимо вывести значение записанного выражения. примеры входные данные 8 9 + 1 7 - * выходные данные -102 2.в одной компьютерной игре игрок выставляет в линию шарики разных цветов. когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. все шарики при этом сдвигаются друг к другу, и ситуация может повториться. напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас "уничтожено". естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный момент может быть не более одной. входные данные сначала вводится количество шариков в цепочке (не более 1000) и цвета шариков (от 0 до 9, каждому цвету соответствует свое целое число). выходные данные требуется вывести количество шариков, которое будет "уничтожено". примеры входные данные 5 1 3 3 3 2 выходные данные 3 решить хоть 1 из двух

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