題目描述
我們現實生活中通常使用中綴表示式,但在計算機裡會用到字首表示式以及字尾表示式,他們的含義如下:
字首:先寫運算子,接著是第乙個運算元,最後是第二個運算元;
字尾:先寫第乙個運算元,接著寫第二個運算元,最後寫運算子。
如中綴表示式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...