PTA 堆疊操作合法性

2022-09-22 22:54:24 字數 956 閱讀 7214

題目要求:

假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行(如沒有出現刪除時棧空)且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。

輸入格式:

輸入第一行給出兩個正整數n和m,其中n是待測序列的個數,m(≤50)是堆疊的最大容量。隨後n行,每行中給出乙個僅由s和x構成的序列。序列保證不為空,且長度不超過100。

輸出格式:

對每個序列,在一行中輸出yes如果該序列是合法的堆疊操作序列,或no如果不是。

輸入樣例:

4 10

sssxxsxxsx

sssxxsxxs

ssssssssssxss*********xx

sssxxs***

輸出樣例:

yesno no

no解題思路:

這題雖然是對堆疊的操作,但其實我們並沒必要真的去寫乙個棧出來,只要去模擬這個過程就可以了。這裡我先用了乙個一維的字串陣列來接受輸入,用sum表示棧區里的元素個數,開始sum初始化為0。然後掃瞄這個字串,若字元為』s』,則代表入棧,這時只要sum ++就可以了,同理,字元為』x』時,sum –。在任何乙個只要sum < 0或者sum > m,則用flag = 0表示錯誤,並跳出迴圈。最後整個字串掃瞄完畢後,判斷sum是否等於0,並且flag是否為0就可以看出堆疊操作是否合法了。沒做完一組資料,記得初始化資料。

code:

#include

#include

int main()

; scanf("%d %d", &n, &m);

while(n --)

}else if(str[i] == 'x')

} }

if(flag == 0 || sum != 0)

else

} return 0;

}

浙大PTA堆疊操作合法性

假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入格式 輸入第一行給出兩個正整數n和m,其中n是待測序列的個數,m ...

堆疊操作合法性

題目描述 假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入格式 輸入第一行給出兩個正整數n和m,其中n是待測序列的...

堆疊操作合法性

堆疊操作合法性 假設以s和x分別表示入棧和出棧操作。如果根據乙個僅由s和x構成的序列,對乙個空堆疊進行操作,相應操作均可行 如沒有出現刪除時棧空 且最後狀態也是棧空,則稱該序列是合法的堆疊操作序列。請編寫程式,輸入s和x序列,判斷該序列是否合法。輸入第一行給出兩個正整數n和m,其中n是待測序列的個數...