PTA basic 1003 我要通过! (20 分) c语言实现(gcc)

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

  1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 YES,否则输出 NO

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
 

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO


解题思路

1.第一眼没看懂规律, 观察发现字符串只会出现一个P和一个T以及若干A, PT中间必须有A,只能出现PTA三种字符

2.提交后通过5/8, 搜索题目后发现在P前面的A(暂记a0)和PT中间的A(暂记a1)以及在T后面的A(暂记a2)是有规律的  a0*a1==a2  

 参考文章 https://blog.csdn.net/liuchuo/article/details/51994881

3.再次提交后通过7/8,测试发现PT必须按照,P在先T在后的顺序,修改后通过

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 #include "string.h"
 4 
 5 int match();
 6 int match(char *str){
 7     int i,countP=0,countT=0,a[]={0,0,0};
 8     if(strlen(str)<3)return -1;
 9     for(i=0;i<strlen(str);i++){
10         if((str[i]-'P')==0||(str[i]-'A')==0||(str[i]-'T')==0){//仅出现PTA三中字符,否则返回0
11             if((str[i]-'P')==0&&countT==0)countP++;//T前面出现P
12             if((str[i]-'T')==0)countT++;
13             if((str[i]-'A')==0&&countP==0&&countT==0){//计数P前面的A
14                 a[0]++;
15             }else if((str[i]-'A')==0&&countT==0&&countP==1){//计数PT中间的A
16                 a[1]++;
17             }else if((str[i]-'A')==0&&countT==1&&countP==1){//计数T后面的A
18                 a[2]++;
19             }
20         }else{
21             return 0;
22         }
23     }
24     if(countP==1&&countT==1&&(a[0]*a[1]==a[2])){//P在前T在后且仅出现一次,同时满足a[0]*a[1]==a[2],返回1
25         return 1;
26     }
27     return 0;
28 }
29 int main(){
30     int n,i;
31     scanf("%d",&n);
32     char s[11][101];
33     if(n){
34         for(i=0;i<n;i++){
35             scanf("%s",s[i]);
36         }
37     }
38     for(i=0;i<n;i++){
39         if(match(s[i])>0){
40             printf("YES\n");
41         }else{
42             printf("NO\n");
43         }
44     }
45     return 0;
46 }

 

posted @ 2021-04-17 23:35  keiiha  阅读(118)  评论(0编辑  收藏  举报