1003

2018-08-11  本文已影响0人  笔墨流年乱浮生

//1003 我要通过!(20)(20 分)
//“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
//得到“答案正确”的条件是:
//1. 字符串中必须仅有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

C:

#include

int main(int argc, const char * argv[]) {

    int n = 0;

    char c;

    scanf("%d",&n);//输入字符串个数n

    while (getchar() != '\n');//接收字符串,直到回车

    for (int i = 0; i < n; i++) {  //对1-n个字符串做处理

    int pos = 0;//pos用来检查PAT的顺序,也作为P前、P&T、T后三部分的索引

    int cnt[3] = {0,0,0};//P前、P&T、T后三部分中A的个数,这里需要注意pos和cnt必须在for循环里,\

        //每个字符串都要重新初始化,在这里我出了错误

    while((c = getchar()) != '\n')//逐个字符读取

    {

        if (c == 'A') { //当前字符为A

            cnt[pos]++;//统计当前块的A的个数

        }else if(c == 'P' && pos == 0)//当前字符为P,并且前面只出现空字符或A

        {

            pos =1;

        }else if (c == 'T' && pos == 1)//当前字符为T,并且前面出现了字符P

        {

            pos =2;

        }else break;//跳出当前while循环

    }

    if (pos == 2 && c == '\n' && cnt[1] && (cnt[0] * cnt[1]) == cnt[2]) {

        //pos == 2 表示当前字符处理到T后\

      //  c == '\n' 表示当前字符处理到回车\

      //  cnt[1] 表示PT之间存在A\

     //   cnt[0] * cnt[1] == cnt[2])表示P前A的个数*P&TA的个数==T后A的个数

        printf("YES\n");

    }else printf("NO\n");

    if (c != '\n') {//这段代码是为了将当前字符串处理完,比如输入BCD,处理到B时break,后续字符无法处理,直接读完即可

            while ((c = getchar()) != '\n');

        }

    }

    return 0;

}

上一篇下一篇

猜你喜欢

热点阅读