演算法:搜尋
這個就比較內涵了,因為只有入棧和出棧兩種情況。
1.當剩餘數大於0的時候對應入棧操作(棧+1,剩餘數-1)。
2.當棧數大於0的時候對應出棧操作(棧-1,剩餘數不變)。
注意以上兩個步驟是同時進行的。而完成一次操作的標誌就是:
棧數=剩餘數=0,這種情況表示一次棧操作完成。
注意要用到另乙個語句。
program vj1122;
const
maxn=15;
var n,ans,stack,rest:longint;
procedure pop(stack,rest:longint);
forward;
procedure push(stack,rest:longint);
forward;
procedure pop(stack,rest:longint);
begin
if (stack=0) and (rest=0) then
begin
inc(ans);
exit;
end;
if stack>0 then pop(stack-1,rest);
if rest>0 then push(stack+1,rest-1);
end;
procedure push(stack,rest:longint);
begin
if stack>0 then pop(stack-1,rest);
if rest>0 then push(stack+1,rest-1);
end;
begin
assign(input,'vj1122.in'); reset(input);
assign(output,'vj1122.out'); rewrite(output);
readln(n);
stack:=0;
rest:=n;
ans:=0;
push(stack,rest);
writeln(ans);
close(input); close(output);
end.
出棧序列統計
問題描述 棧是常用的一種資料結構,有 n令元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩 種 push 和pop 前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的 n,計算並輸出由運算元序列...
出棧序列統計
棧是一種常見的資料結構,有許多關於棧的問題,其中之一就是統計元素可能的出棧序列。具體說,就是給定n個元素,依次通過乙個棧,求可能的出棧序列的個數。如果我們用直接模擬的方法,當n較大時會很費時間 另一種方法是利用組合數學求出棧序列個數,得到公式 下面我們來看一種圖形化的方法證明這個等式,很容易理解的。...
出棧序列統計
棧是常用的一種資料結構,有n個元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩種 push和pop,前者是將乙個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由乙個操作序列可以得到一系列的輸出序列。請你程式設計求出對於給定的n,計算並輸出由運算元序列1,2,n,經過一...