1.應用棧的知識對代數表達式的合法性檢驗.
下面式子是合法的代數表達式:
a;
a+b*(a+c);
a*a/(b+c);
下列式子是不合法的代數表達式:
ab;
a+b*(c+d);{因子中無字母d}
程序要求
輸入:輸入一個字符,以’#’結束,(’#’本身不是代數表達式中字符,僅作為結束符號)。
輸出:若表達式正確,則輸出’OK’;
若表達式不正確,則輸出’ERROR’及錯誤類型。
錯誤類型約定
① 式子中出現不允許的字符;
② 括號不配對;(括號可以是{ }、[ ]、()。)
③ 其他錯誤。
輸入輸出樣例
輸入a+(b);
輸出OK
輸入a+(b+c*a;
輸出error 2
2.產生數。
問題描述 給出一個整數 n(n<10^30) 和 k 個變換規則(k<=15)。
規則:
一位數可變換成另一個一位數:
規則的右部不能為零。
例如:n=234。有規則(k=2):
2-> 5
3-> 6
上面的整數 234 經過變換後可能產生出的整數為(包括原數):
234
534
264
564
共 4 種不同的產生數
問題:給出一個整數 n 和 k 個規則。求出:經過任意次的變換(0次或多次),能產生出多少個不同整數。
僅要求輸出個數。
輸入
鍵盤輸人,格式為:
n k
x1 y1
x2 y2
... ...
xn yn
輸出
屏幕輸出,格式為:
一個整數(滿足條件的個數):
輸入輸出樣例
輸入:
234 2
2 5
3 6
輸出:
4
3.棧。
棧有兩種最重要的操作,即pop(從棧頂彈出一個元素)和push(將一個元素進棧)。
棧的重要性不言自明,任何一門數據結構的課程都會介紹棧。寧寧同學在復習棧的基本概念時,想到了一個書上沒有講過的問題,而他自己無法給出答案,所以需要你的幫忙。
寧寧考慮的是這樣一個問題:一個操作數序列,從1,2,一直到n(圖示為1到3的情況),棧A的深度大於n。
現在可以進行兩種操作,
1.將一個數,從操作數序列的頭端移到棧的頭端(對應數據結構棧的push操作)
2.將一個數,從棧的頭端移到輸出序列的尾端(對應數據結構棧的pop操作)
使用這兩種操作,由一個操作數序列就可以得到一系列的輸出序列,下圖所示為由1 2 3生成序列2 3 1的過程。(原始狀態如上圖所示)
你的程序將對給定的n,計算並輸出由操作數序列1,2,…,n經過操作可能得到的輸出序列的總數。
輸入格式
輸入文件只含一個整數n(1≤n≤18)
輸出格式
輸出文件只有一行,即可能輸出序列的總數目
輸入樣
3
輸出樣例
5
補充:
源文件發到郵箱也可以 [email protected] 謝謝
你qq多少,最遲我可以在明後兩天擠時間做出來,我發郵件到你的郵箱,附件方式。