1003

作者: 笔墨流年乱浮生 | 来源:发表于2018-08-11 14:15 被阅读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;
    
    }
    
    

    相关文章

      网友评论

          本文标题:1003

          本文链接:https://www.haomeiwen.com/subject/hqrdbftx.html