題目描述 棧是常用的一種數據結構,有n個元素在棧頂端一側等待進棧,棧頂端另一側是出棧序列。你已經知道棧的操作有兩種:push和pop,前者是將一個元素進棧,後者是將棧頂元素彈出。現在要使用這兩種操作,由一個操作序列可以得到一系列的輸出序列。請你編程求出對於給定的n,計算並輸出由操作數序列1,2,……,n,經過一系列操作可能得到的輸出序列總數。 輸入 一個整數n(1<=n<=15)。 輸出 一個整數,即可能輸出序列的總數目。 示例輸入 3 示例輸出 5 這是我們oj的一道題目,昨天哥幾個在宿捨中說道今天講棧,出幾個題目,偶爾看到這個題了,自己沒有做過,就想著做一做,一開始還真是沒有思路,無奈之余就在紙上畫了畫,才慢慢的懂得。有規律的 [cpp] #include <stdio.h> #include <string.h> #include <math.h> long long int a[21]; long long int chan[21]; int main() { int i,j,n,m,t,x; long long int s; scanf("%d",&n); memset(a,0,sizeof(a)); if(n==1) { printf("1\n"); } else if(n==2) { printf("2\n"); } else { a[3]=1; a[2]=1; for(i=4; i<=n; i++) { for(j=1; j<=20; j++) { chan[j]=a[j]; } memset(a,0,sizeof(a)); for(j=1;j<=20;j++) { if(chan[j]!=0) { t=chan[j]; for(x=j+1;x>=2;x--) { a[x]+=t; } } } } for(i=1,s=0; i<=20; i++) { s+=i*a[i]; } printf("%lld\n",s); } return 0; }