Постфиксную запись удобно воспринимать как манипуляции со стеком — аналогом длинной трубки с отверстием внизу. в которую можно класть шары, при этом каждый следующий шар проталкивает дальше предыдущие.
Идём по записи 1) 5 — кладём в стек 5 2) 13 — кладём в стек 13 3) 7 — кладём в стек 7 4) - — вытаскиваем из стека два последних шара (13 и 7) и кладём обратно их разность 13 - 7 = 6 5) * — вытаскиваем из стека два последних шара (5 и 6) и кладём обратно их произведение (5 * 6 = 30). 30 и будет ответом.
var
n, Num, i, j, t: integer;
Count: array[1..12] of integer;
Names: array[1..12] of integer;
begin
for i := 1 to 12 do
begin
Count[i] := 0;
Names[i] := i;
end;
ReadLn(N); { Считываем количество запросов}
for i := 1 to N do
begin
ReadLn(t); {считали очередной запрос}
Count[t] := Count[t] + 1;
end;
{Сортируем массивы Names и Count в порядке убывания значений массива Count}
for i := 12 downto 2 do
for j := 2 to i do
if Count[j - 1] < Count[j] then
begin
t := Count[j];
Count[j] := Count[j - 1];
Count[j - 1] := t;
t := Names[j];
Names[j] := Names[j - 1];
Names[j - 1] := t;
end;
for i := 12 downto 1 do
if Count[i] > 0 then
WriteLn(Names[i], ' ', Count[i]);
end.
Объяснение:
Идём по записи
1) 5 — кладём в стек 5
2) 13 — кладём в стек 13
3) 7 — кладём в стек 7
4) - — вытаскиваем из стека два последних шара (13 и 7) и кладём обратно их разность 13 - 7 = 6
5) * — вытаскиваем из стека два последних шара (5 и 6) и кладём обратно их произведение (5 * 6 = 30). 30 и будет ответом.
Эта запись равносильна такой: 5 * (13 - 7)