1樓:匿名使用者
不一定要一次性全部都進棧,也不一定一次性都出棧!
可以push(1) pop(1) push(2) push(3) pop(3) push(4) pop(4) pop(2) push(5) pop(5)
也可以有其他n多種 push 跟 pop 的順序 答案也就有n種了 。一樓的答案蠻準的 (全不全我就不知道了)
至於有多少種答案也就是把5次 push 跟 5次pop 進行排序 ,而且 pop時要保證棧不是空的!
2樓:
#include
#include
#define element_type int
/* 列印所有可能的出棧順序
引數:queue 已知的入棧順序
queue_size 棧 queue 的大小
遞迴使用引數:
poped_queue 出棧順序。poped_queue[i]=j 表示元素 queue[j] 第 i 個出棧。可以初始為 null。
poped_queue_size poped_queue 棧的大小。必須初始為 0 。
total 統計出棧順序總數。可以初始為 null。或者初始為一個變數的地址,該變數的值必須為 0。
*/ void printallpoporder(element_type queue,int queue_size,
int poped_queue,int poped_queue_size,int *total)}}
}/*"所有可能出棧的順序總數" ,其實是一個卡特蘭數(catalannumber)。
設棧的元素數目為 n , 那麼"所有可能出棧的順序總數"為:
2n!/(n+1)/n!
也就是第 n 個卡特蘭數。
引數:n 卡特蘭數的編號(從1開始)
返回:第 n 個卡特蘭數
*/int getcatalannumber (int n)
int main(int argc, char *argv)
;int queue_size = sizeof(queue)/sizeof(queue[0]);
int total_1=0,toatl_2=0;
// 輸出所有可能的出棧順序
printf("total = %d\n",total_1);
// 呼叫 printallpoporder 其實已經通過變數 total_1 得到了出棧順序的總數。
// 下面用公式(卡特蘭數)計算所有可能出棧順序的總數。
toatl_2 = getcatalannumber(queue_size);
printf("total = %d\n",toatl_2);
return 0;}/*
1 2 3 4 5
1 2 3 5 4
1 2 4 3 5
1 2 4 5 3
1 2 5 4 3
1 3 2 4 5
1 3 2 5 4
1 3 4 2 5
1 3 4 5 2
1 3 5 4 2
1 4 3 2 5
1 4 3 5 2
1 4 5 3 2
1 5 4 3 2
2 1 3 4 5
2 1 3 5 4
2 1 4 3 5
2 1 4 5 3
2 1 5 4 3
2 3 1 4 5
2 3 1 5 4
2 3 4 1 5
2 3 4 5 1
2 3 5 4 1
2 4 3 1 5
2 4 3 5 1
2 4 5 3 1
2 5 4 3 1
3 2 1 4 5
3 2 1 5 4
3 2 4 1 5
3 2 4 5 1
3 2 5 4 1
3 4 2 1 5
3 4 2 5 1
3 4 5 2 1
3 5 4 2 1
4 3 2 1 5
4 3 2 5 1
4 3 5 2 1
4 5 3 2 1
5 4 3 2 1
total = 42
total = 42
ps;"@找個名字真難吶" 列出了34個,少了8個,它們是:
12453
13425
13452
13542
14352
14532
21354
21453*/
若讓元素1,2,3,4,5依次進棧,則出棧次序不可能出現?
3樓:鄰冰
答案是c。
根據棧的後進先出的性質,棧頂元素可能是1,2,3,4,5也就是出棧序列的第一個元素可能為1,2,3,4,5對於5,4,3,1,2,我解釋下,其他可以類推:
若想3先出棧,那麼必須1和2已經進棧,然後3進棧,3再出棧(序列:3),而【此時棧的棧頂元素】為2,所以第二個出棧的元素不可能是1,而只能是2,所以此時的出棧序列必為:321
以此類推,出棧次序不可能出現c.4,3,1,2,5
出棧順序所有可能:
12345,12354,12435,12543,13245,13254,14325,15432
21345,21435, 21543,23145,23154,23415,23451,23541,24315,24351,24531 25431
32145 32154 32415 32451 32541 34215 34251 34521 35421
43215 43251 43521 45321
54321
4樓:牙刷的悲傷
你同學說的是錯的,棧的規則是先進後出,吐過剛進去就出來,可以得到1,2,3,4,5.
c錯的原因是因為4,3先出來的,表示1剛開始沒有出來,所以1不可能比2先出來。。
5樓:娛樂嗶嗶姬
重點:五個元素可以不是一次性進棧、一次性出棧。
a:是五個元素一次性進棧,即1,2,3,4,5進棧。然後一次性出棧即5,4,3,2,1。可能
b:先讓1,2進棧,然後出棧即2,1;再然後讓3,4,5進棧,出棧為5,4,3;即總出棧順序為2,1,5,4,3。可能
d:先讓1,2進棧,然後出棧2;再讓3進棧,又讓3出棧;讓4,5進棧,讓後出棧剩餘元素5,4,1;即總出棧順序為2,3,5,4,1。可能
c:要滿足題目條件1,2,3,4,5順序進棧,根據出棧順序先為4,3,則剩下三個元素的出棧順序可能性有:215,521。
即以4,3開頭的總出棧的可能有:43215、43521。不可能
選c
6樓:匿名使用者
棧是先進後出,題中c的進法是1進2進3進4進4出3出後應該是2出,不是1出
7樓:勤奮的始末
棧是後進先出,c1,2,3,4進棧4出棧3出棧1不可能比2先出棧
n 個元素順序入棧,則可能的出棧序列有多少
8樓:悽清的小白鼠
我來補充吧,其實進棧出棧是可以同時進行的,並不一定要全部進去再出來,可以先進一部分再出來,所以關鍵是從那個開始先出
1.第一個先出的為d 則必須為dcba
2.第一個出來的是c則可為 cdba (abc依次進然後c出來d進去再出來然後ba出來) 也可為cbad (cb出來d進 、出,a出)也可為cbda 就是c之前的ab必須先b再a 因為是a先進而b是後進(注意是沒有出去)
3、同理第一個為b時可以為 bcda、bdca、bacd、badc、bcad(bdac是不行的因為要d排第二必須c進去而沒有出來也就是說c必須先a而出)
9樓:憑實陀雪
n個資料依次入棧,出棧順序種數的遞推公式如下:
f(n)=∑(f(n-1-k)*fk);其中k從0到n-1已知f0=1,
f1=f0*f0=1
f2=f1*f0+f0*f1=2
f3=f2*f0+f1*f1+f0*f2=5……證明的話,對於n個資料,我只看第一個資料的出入棧順序:
第一個資料入棧到出棧之間可以包含0,1,2…n-1個資料的出入棧,相應的,第一個資料出棧之後,還有n-1,n-2…2,1,0個資料需要出入棧
根據組合數學裡面的乘法原理,需要把第一個資料出棧前後的種數相乘根據加法原理,需要把第一個資料出入棧的n種方式全加起來於是就得到了那個遞推公式,不過,要找出一個直接計算fn的公式似乎不太好辦。
如何讓IE9以下版本認識html5元素
一騎當後 每個瀏覽器都有一份清單列舉自己所支援的html元素。不在清單上的元素都將被視為未知元素。瀏覽器不會給未知元素設定任何樣式 不同瀏覽器對元素會有不同的預設樣式 在ie9之前的版本中,也不能對未知元素設定樣式。未知元素的dom也顯示不正確,ie會在dom中插入一個沒有子元素的空節點。所有你原本...
X Y Z M G五種元素分屬短週期,且原子序數依次增大X Z同主族,可形成離子化合物ZX Y M同主
x y z m g五種元素分屬三個短週期,且原子序數依次增大,x為主族元素,所以x是h元素 x z同主族,可形成離子化合物zx,y為主族元素,且z原子序數大於y原子序數,所以z是na元素 y m同主族,可形成my2 my3兩種分子,所以y是o元素,m是s元素,g是短週期主族元素,所以g是cl元素 不...
高中化學題,短週期元素A B C D的原子序數依次增大。A原子的最外層電子數是內層電子數的
選bca 原子的最外層電子數是內層電子數的 2 倍,說明a為碳 短週期元素 a b c d 的原子序數依次增大。元素 b 在同週期的主族元素中原子半徑最大,說明b為鈉 元素 c 的合金是日常生活中常用的金屬材料,說明c為鋁 d 位於第 via 族,說明d為硫 a.元素 a b 的氯化物分別為ccl4...