PTA 1003 我要通過! (20分) C語言

2020-08-08 21:06:05

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

參考這篇文章:https://blog.csdn.net/qq_43160216/article/details/86516462?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159688373919725222455873%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=159688373919725222455873&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-4-86516462.first_rank_v2_rank_v25&utm_term=1003+我要通過!+%2820分%29&spm=1018.2118.3001.4187

#include<stdio.h>
int main()
{
	int n,i,result[11];
	char c;
	scanf("%d",&n);
	getchar();
	for(i=0;i<n;i++)
	{
		int c1=0,c2=0,c3=0,flag=1,cnt=0,P=0,T=0,A=0;
		//flag判斷是否有其他字元
		//cnt表示狀態
		while((c=getchar())!='\n')
		{
			if(c=='P')
			{
				P++;
				cnt=1;
			}
			else if(c=='A')
			{
				A++;
			}
			else if(c=='T')
			{
				T++;
				cnt=2;
			}
			else
				flag=0;
			switch(cnt)
			{
			case 0:
				c1++;
				break;
			case 1:
				if(c!='P')
					c2++;
					break;
			case 2:
				if(c!='T')
					c3++;
					break;
			}
		}
		if(flag&&(P==1)&&(T==1)&&(A!=0)&&(c1*c2==c3))
			result[i]=1;
		else
			result[i]=0;
	}
	for(i=0;i<n;i++)
	{
		if(result[i]==1)
			printf("YES\n");
		else
			printf("NO\n");
	}
	return 0;
}