1. 程式人生 > >PAT乙級1003我要通過!

PAT乙級1003我要通過!

題目描述: “答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 PAT 的“答案正確”大派送 —— 只要讀入的字串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。

得到“答案正確”的條件是:

字串中必須僅有 P、 A、 T這三種字元,不可以包含其它字元; 任意形如 xPATx 的字串都可以獲得“答案正確”,其中 x 或者是空字串,或者是僅由字母 A 組成的字串; 如果 aPbTc 是正確的,那麼 aPbATca 也是正確的,其中 a、 b、 c 均或者是空字串,或者是僅由字母 A 組成的字串。 現在就請你為 PAT 寫一個自動裁判程式,判定哪些字串是可以獲得“答案正確”的。

輸入格式: 每個測試輸入包含 1 個測試用例。第 1 行給出一個正整數 n (<10),是需要檢測的字串個數。接下來每個字串佔一行,字串長度不超過 100,且不包含空格。

輸出格式: 每個字串的檢測結果佔一行,如果該字串可以獲得“答案正確”,則輸出 YES,否則輸出 NO。

輸入樣例: 8 PAT PAAT AAPATAA AAPAATAAAA xPATx PT Whatever APAAATAA

輸出樣例: YES YES YES YES NO NO NO NO 程式碼如下:

#include<iostream>
#include<string>
using namespace std;
int main() { int n,flaga,flagb,flagc,flag; string s; cin>>n; while(n--) { flag=0;flaga=-1;flagb=-1;flagc=-1; cin>>s; for(int i=0;i<s.length();i++) { if(s[i]=='P') flaga=i; if(s[i]=='T') {
flagb=i-flaga-1; flagc=s.length()-i-1; } } for(int i=0;i<s.length()&&!flag;i++) { if(s[i]!='P') { if(s[i]!='A') { if(s[i]!='T') { flag=1; } } } } if(flaga==0&&flagc==0&&flagb!=0) { cout<<"YES"<<endl; } if(flaga>0&&flagb!=0&&flagc!=0) { if(((flagc/flagb)==flaga)&&!flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } if(flaga<0||flagb<0||flagc<0) cout<<"NO"<<endl; if(flagb==0) cout<<"NO"<<endl; } return 0; }

來總結一下: 1)剛開始看的也不是很懂,就一個一個寫,找規律,滿足開頭的A的個數 * 中間的A的個數 = 結尾的A的個數。