程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> SDUT 1266 出棧序列統計

SDUT 1266 出棧序列統計

編輯:C++入門知識

    題目描述 棧是常用的一種數據結構,有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;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved