1. 程式人生 > >1003 我要通過! (20 分)

1003 我要通過! (20 分)

“答案正確”是自動判題系統給出的最令人歡喜的回覆。本題屬於 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 <stdio.h>
#include <string.h>
#define MAXNUM 100 int allPAT(char test[]) { int i; int res = 1; for(i=0; test[i] != '\0'; i++){ if(test[i] != 'P'&& test[i] != 'A'&& test[i] != 'T') res = 0; } return res; } int main() { int n; char test[MAXNUM]; char *ans[] = {"NO"
, "YES"}; char *a; if(scanf("%d", &n)) getchar(); while(n--){ a = ans[0]; int i; int lena;/*a中A的個數*/ int lenb;/*b中A的個數*/ int lenc;/*c中A的個數*/ for(i=0; (test[i] = getchar()) != '\n'; i++)/*取一條字串*/ ; test[i] = '\0'; if(allPAT(test)){ lena = 0; lenb = 0; lenc = 0; while(test[lena] == 'A') lena++; if(test[lena] == 'P'){ while(test[lena+1 + lenb] == 'A') lenb++; if(test[lena+1 + lenb] == 'T'){ while(test[lena+1 + lenb+1 + lenc] == 'A') lenc++; if(test[lena+1 + lenb+1 + lenc] == '\0' && (lena*(lenb+1)) == (lenc+lena) && lenb>0) a = ans[1]; } } } printf("%s\n", a); } return 0; }