字首轉字尾 jzoj 1590

2021-08-15 07:01:39 字數 1451 閱讀 7273

題目描述

我們現實生活中通常使用中綴表示式,但在計算機裡會用到字首表示式以及字尾表示式,他們的含義如下:

字首:先寫運算子,接著是第乙個運算元,最後是第二個運算元;

字尾:先寫第乙個運算元,接著寫第二個運算元,最後寫運算子。

如中綴表示式3 + 4,在字首表示為+ 3 4,在字尾裡表示為3 4 +,而(5 - 4)- 2的字首為- - 5 4 2,字尾為5 4 - 2 -。

你的任務是輸入乙個字首表示式,輸出它所對應的字尾表示式。

輸入

輸入乙個字首表示式,運算子只有「+」和「-」,運算元都是只有1個位數字(0到9),運算子和運算元之間都用乙個空格隔開,表示式沒有前導空格。每個表示式都是合法的,並且運算子不超過20個。
輸出

輸出對應的字尾表示式。
樣例輸入

樣例輸出

題解:是數字輸出,是字元就搜尋。

var i,j,m,p,k:longint;

st:string;

a,b:array[0..10000] of char;

f:array[0..10000] of boolean;

procedure

search

(dep:longint;ch:char);

var i,j,k,t:longint;

begin

f[dep]:=true;

t:=0;

ifnot(ch in['0'..'9']) then

begin

for i:=1to2

dobegin

while (f[dep+t]=true) do inc(t);

search(dep+t,a[dep+t]);

end;

b[p]:=a[dep];

inc(p);

endelse

begin

b[p]:=a[dep];

inc(p);

end;

end;

begin

assign(input,'j4.in');

assign(output,'j4.out');

reset(input);

rewrite(output);

readln(st);

j:=1;p:=1;

for i:=1

to length(st) do

if (st[i]<>' ') then

begin

a[j]:=st[i];

inc(j);

end;

search(1,a[1]);

for i:=1

to p-1

dowrite(b[i],' ');

close(input);close(output);

end.

SSL ZYC 字首轉字尾

題目大意 輸入乙個字首表示式,輸出它所對應的字尾表示式。字首 先寫運算子,接著是第乙個運算元,最後是第二個運算元 字尾 先寫第乙個運算元,接著寫第二個運算元,最後寫運算子。思路 emm 想了好一會 然而還是不會 發現這道題有兩處細節 1 字首和字尾的數字順序完全一樣 2 字首和字尾的符號順序完全相反...

中綴轉字尾和字首

中綴轉字尾 include using namespace std bool isoperator char ch intgetpriority char ch return level string postorder void trans string inorder s.pop else el...

中綴式轉字首式 轉字尾式

1 從左向右讀取字元,新建陣列suffix用來儲存字尾表示式 2 如果遇到 入棧,繼續讀取。3 如果遇到 將棧頂元素依次出棧存到suffix中,直到棧頂元素為 此時將棧頂元素出棧,繼續讀取。4 如果遇到運算子,將其與棧頂元素進行比較,如果該運算子優先順序小於等於棧頂元素,則將棧頂元素出棧,存到suf...