PAT 乙级
原题链接
- 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;【仅有PAT】
- 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;【形如xPATx】
- 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。【 aPbTc==aPbATca】
【仅有PAT】 | n1=0,n2=1,n3=0 |
---|---|
【形如xPATx】 | n1=x,n2=1,n3=x |
【 aPbTc==aPbATca】 | n1=a,n2=b,n3=c; n1=a,n2=bA,n3=ca; |
- n1*n2=n3(n1,n2,n3分别代表P前、PT间、T后的A数量)
#include<stdio.h>
#include<string.h>
int main(){
int i,p=0,a=0,t=0,j,k;
scanf("%d",&i);
//i为输入样例个数
int pin[99];
//pin为保存输入样例是否正确,2---》有其他字符,1-----》正确
k=i;
//循环输入
while(k!=0){
char n[99]={};
scanf("%s",n);
for(j=0;n[j]!='\0';j++){
//判断P,T位置
switch(n[j]){
case 'P': p=j;break;
case 'A': a++;break;//确保输入样例中包含字符A
case 'T': t=j;break;
default: pin[k]=2;//含有其他字符
}
}
//数学推导
if(p*(t-p-1)==(strlen(n))-t-1){
if((pin[k]!=2)&&(a!=0))
pin[k]=1;
}
k--;
t=p=a=0;
}
while(i!=1){
if(pin[i]==1)
printf("YES\n");
else
printf("NO\n");
i--;
}
if(pin[1]==1)
printf("YES");
else
printf("NO");
return 0;
}