譯文:
給定乙個堆疊,最多可以保留m
個數字。 按1、2
、3,.
..,n
1、2、3,...,n
1、2、3,
...,
n的順序按n
個數字,然後隨機彈出。 請確定給定的數字序列是否是堆疊的可能彈出序列。 例如,如果m
為5,n
為7,我們可以從堆疊中獲得1、2
、3、4
、5、6
、7
1、2、3、4、5、6、7
1、2、3、
4、5、
6、7,但不能獲得3、2
、1、7
、5、6
、4
3、2、1、7、5、6、4
3、2、1、
7、5、
6、4。
輸入格式:
每個輸入檔案包含乙個測試用例。 對於每種情況,第一行包含3個數字(全部不超過1000個):m
(堆疊的最大容量),n
(彈出序列的長度)和k
(要檢查的彈出序列的數量)。 然後是k
行,每行包含乙個由n
個數字組成的彈出序列。 一行中的所有數字都用空格分隔。
輸出格式:
對於每個彈出序列,如果確實是堆疊可能的彈出序列,則在一行中列印「是」,否則列印為「否」。
輸入例:
575
1234
5673
2175
6476
5432
1564
3721
1765
432
輸出例:
yes
nono
yesno
解題思路:
本題是關於資料結構中的棧的題目,棧最核心的屬性就是它的先入後出,這一點也是解決本題的關鍵,因為本題的入棧順序是按照1,2
,3,.
..,n
1,2,3,...,n
1,2,3,
...,
n的順序,因此假設出棧的數字的是i(1
<=i
<=n
)i(1<= i <=n)
i(1<=i
<=n
),那麼必定有1,2
,3,.
..,i
−1
1,2,3,...,i-1
1,2,3,
...,
i−1已經不在棧中了。
換個方法解釋就是:假設儲存資料的為棧a
,需要判斷真假的為出棧序列b
,那麼從左往右遍歷序列b
,每次遍歷到的b
中的出棧資料要大於等於a
的棧頂元素,因為按照1,2
,3,.
..,n
1,2,3,...,n
1,2,3,
...,
n的順序入棧的話,棧頂的元素一定是當前棧中最大的元素,因此已經出棧的元素必定大於等於棧頂這個最大的元素。若出棧的資料大於棧頂元素,則說明棧a
並未有足夠的輸入進行出棧操作,還需要繼續push
,當push
完成後則判斷當前棧a
的長度是否超過題目允許的最大長度m
,若符合,則進行pop
操作,即將棧頂減1,並且繼續push
乙個更大的數,繼續遍歷。
基於此考慮,建立乙個空棧,按照1,2
,3,.
..,n
1,2,3,...,n
1,2,3,
...,
n的順序入棧,在入棧的過程中與所需要判斷的出棧結果進行比較,看是否存在違反規則的情況,如果存在,則輸出no
,入棧結束後沒有出現違反規則的情況則輸出yes
。
思路到這介紹完畢,接下來是程式,程式中關鍵的部分都已注釋。
完整程式如下:
#include
#define max_size 1000
//資料的最大長度
void
check
(int m,
int n,
int k)
;int
main()
//判斷輸入是否符合規則
void
check
(int m,
int n,
int k)
, top =-1
, num =1;
push[
++top]
= num;
for(j=
0; j)//捕獲每行的n個輸入
scanf
("%d"
,&pop[j]);
for(j=
0; j)while
(pop[j]
>push[top]
) push[
++top]
=++num;
if(top>=m)
if(pop[j]
== push[top]
) top--;if
(top<0)
push[
++top]
=++num;}if
(flag)
printf
("no\n");
else
printf
("yes\n");
}}
手工碼字碼**,如果有幫助到你的話留個贊吧,謝謝。
以上。
02 線性結構4 Pop Sequence
題意 第一行輸入三個整數m n k,分別代表棧容量,進棧序列長度,待核實的出棧序列行數 隨後k行輸入出棧序列,要求核實其是否是乙個可能的出棧序列 分析 根據題意,出棧元素只能是從1到n 可以根據當前的出棧元素,判斷棧內剩餘元素數量以及棧頂元素 又通過剩餘元素數量及棧頂元素判斷下乙個出棧元素是否符合棧...
線性結構練習 4
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
02 線性結構3 Pop Sequence
題目有一點要注意,就是樣例的第五組 1 7 6 5 4 3 2 1可以先出,23456入棧之後,7不能入棧了,所以是不行的 杭電1022有差不多的圖可以理解一下 用stl寫的,c太麻煩不想寫 include include include include include include using ...