题目描述
"答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有
P
、A
、T
这三种字符,不可以包含其它字符; - 任意形如
xPATx
的字符串都可以获得“答案正确”,其中x
或者是空字符串,或者是仅由字母A
组成的字符串; - 如果
aPbTc
是正确的,那么aPbATca
也是正确的,其中a
、b
、c
均或者是空字符串,或者是仅由字母A
组成的字符串。
输入格式
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
输出格式
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES
,否则输出 NO
。
#include<stdio.h>
int main()
{
int n; //字符串个数
scanf("%d",&n);
char str[n][100];
for(int i=0;i<n;i++)
scanf("%s",str[i]);
for(int i=0;i<n;i++)
{
int j=0;
int n0=0,n1,n2,er=1;
int np=0,nt=0;
while(str[i][j] != '\0')
{
if(str[i][j] == 'P')
{
n1=n0;
n0=0; //保存开头A的个数,让n0开始记中间A的个数
np++;
}
else if(str[i][j] == 'A')
{
n0++; //记录开头A的个数
}
else if(str[i][j] == 'T')
{
n2=n0;
n0=0;//保存中间A的个数,让n0开始记末尾A的个数
nt++;
}
else
{
er=0;
break;
}
j++;
}
if(n0 != n1*n2 || er == 0) //A部分的数量不符合要求或者有别的字母引入
printf("NO");
else if((n1 !=0 && n2 ==0) || (n0 !=0 && n2 ==0)) //AxPT和PTAX情况
printf("NO");
else if(n1 ==0 && n2 ==0 && n0 ==0) //没有A
printf("NO");
else if(nt != 1 || np != 1)
printf("NO");
else
printf("YES");
if(i != n-1)
printf("\n");
}
}
题目难在读懂题目上
正确答案的条件是:
- 只有PAT三种字符
- P...A...T可以
- aPbTc可以,aPbATca可以,意为a*b == c时可以
代码比较暴力,仅限初学者参考
欢迎大佬批评指正