1003 我要通过! (20分)
读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:
1、字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
2、任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3、如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。
输入格式:
每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。
输出格式:
每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO。
总结:
数学规律
1、仅有P、A、T;
2、一个P,一个T,P在T之前;
3、P、T之间n个A,n>=1;
4、P左A数*P、T之间A数=T右A数
#include<iostream>
using namespace std;
int main(){
int n;
scanf("%d\n", &n);//\n
//char c;
//int p_c=0,t_c=0,a_c=0,p_l=0,t_r=0,c_c=0;
for(int i=0;i<n;i++){
char c;
int p_c=0,t_c=0,a_c=0,p_l=0,t_r=0,c_c=0,flag=1;
while((c=getchar())!='\n')
{
if(c=='P'||c=='A'||c=='T'){
if(c=='P'){
p_c++;
}
if(c=='A'){
a_c++;
}
if(c=='T'){
t_c++;
}
if(p_c==0&&c=='A'){
p_l++;
}
if(p_c==1&&t_c==1&&c=='A'){
t_r++;
}
if(p_c==1&&t_c==0&&c=='A'){
c_c++;
}
}
else{
flag=0;//别忘记!
//break;//error:会跳出两层循环
}
}
if(flag==1&&p_c==1&&t_c==1&&c_c>0&&(p_l*c_c==t_r)){
cout<<"YES\n";
}
else
{
cout<<"NO\n";
}
}
}
//如何换行;
//如何输入判断结束;
1004
结构体