由題目可知:
得到「答案正確」的條件是:
1.字串中必須僅有 p、 a、 t這三種字元,不可以包含其它字元;
2.任意形如 xpatx 的字串都可以獲得「答案正確」,其中 x 或者是空字串,或者是僅由字母 a 組成的字串;
3.如果 apbtc 是正確的,那麼 apbatca 也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 a 組成的字串。
通過分析這三個條件,可以得知:
(1)「正確答案」 的字串是由pat組成的
(2)並且只有乙個p和乙個t,至少有乙個a
(3)第三個條件不太好理解,我們可以通過條件2來進行更好的理解:
(i)因為apbtc ="pat"是正確答案,所以a=c=』 ',b='a』時是正確答案,由條件3知道apbatca = 'paat』也是正確答案
(ii) 因為apbtc ="apata"是正確答案,所以a=c=『a』, b = 』 a』的時候是正 確答案,由條件3知道apbatca = 'apaataa』也是正確答案
(iii) 因為apbtc ="aapataa"是正確答案,所以a=c=『aa』, b = 』 a』的時候是正 確答案,由條件3知道apbatca = 'aapaataaaa』也是正確答案
通過這三個例子我們應該可以發現乙個規律了吧:
我們記字母p前面的a的個數為n1, p和t之間的a的個數記為n2, t後面的a的個數為n3, 我們很容易發現正確答案n1*n2=n3恆成立。(可以自己舉更多例子)
所以我寫程式的時候的思路是這樣子的:
1.判斷輸入的字串是不是由p,a,t這三個字母組成
2.如果是的話,我們再判斷p和t的個數是不是1
3.判斷p是不是在t的前面
4.把字串分割:以p為分割線分割,得到 p前面的字串a和p後面的字串res,然後再將res以t為分割線分割,得到p和t中間的字串b,和t後面的字串c, 然後分別統計a,b, c裡面a的個數n1, n2, n3,
如果n1 * n2 =n3,則說明這個字串是正確答案
**如下:
def
check_string
(string)
:# 判斷字串是不是由p,a,t組成,我用空格代替p,a, t,
if string.replace(
'p','')
.replace(
'a','')
.replace(
't','')
!=''
:return
false
if string.count(
'p')!=1
:return
false
if string.count(
't')!=1
:return
false
# 判斷p是不是在t前面
if string.index(
"t")
< string.index(
"p")
:return
false
a, res = string.split(
'p')
b, c = res.split(
't')
if b.count(
'a')==0
:return
false
if a.count(
'a')
* b.count(
'a')
== c.count(
'a')
:return
true
n =int
(input
("請輸入乙個整數:"))
for i in
range
(n):
b =input
("請輸入乙個字串:"
)if check_string(b)
:print
('yes'
)else
:print
('no'
)
PAT 1003 我要通過!
深刻理解 如果 apbtc 是正確的,那麼 apbatca 也是正確的 可以用數學表示式寫為 a b 1 c a 其中a,b,c,1均為含有字元 a 的個數 故可得len a len b len c 上 思路仿寫了另一位博主的 include include using namespace std ...
PAT 1003 我要通過!
答案正確 是自動判題系統給出的最令人歡喜的回覆。本題屬於pat的 答案正確 大派送 只要讀入的字串滿足下列條件,系統就輸出 答案正確 否則輸出 答案錯誤 得到 答案正確 的條件是 1.字串中必須僅有p,a,t這三種字元,不可以包含其它字元 2.任意形如 xpatx 的字串都可以獲得 答案正確 其中 ...
pat 1003 我要通過! 20
答案正確 是自動判題系統給出的最令人歡喜的回覆。本題屬於pat的 答案正確 大派送 只要讀入的字串滿足下列條件,系統就輸出 答案正確 否則輸出 答案錯誤 得到 答案正確 的條件是 1.字串中必須僅有p,a,t這三種字元,不可以包含其它字元 2.任意形如 xpatx 的字串都可以獲得 答案正確 其中 ...