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.
1) 50 * 96 = 4800 символов в сообщении которое будем передавать
2) 4800 * 1 байт = 4800 байт информационный объем передаваемого сообщения
3) 29 Кбайт / сек = 29696 байт / сек - скорость передачи данных
4) 4800 / 29696 = 1,62 сек потребуется для передачи сообщения со скоростью 29 Кбайт/сек
Вариант 1 (если скорость 29 кбит/сек
1) 50 * 96 = 4800 символов в сообщении которое будем передавать
2) 4800 * 1 байт = 4800 байт = 38400 бит информационный объем передаваемого сообщения
3) 29 Кбит / сек = 29696 бит / сек - скорость передачи данных
4) 38400 / 29696 = 1,29 сек потребуется для передачи сообщения со скоростью 29 Кбит/сек
Объяснение: