zoukankan      html  css  js  c++  java
  • PAT-B-1003

    1003 我要通过!(20 分)

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

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

    1. 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
    2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
    3. 如果 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
    思考:

    分析题意分析,P之前A的个数PA,P与T中间A的个数PAT,T之后的A的个数TA,存在:TA = PAT*PA。有了这个结论之后问题就转变为如何求这三个值了。

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int judge(int a, int b, int c){
     5     return c == b*a;//根据两个递归条件得到:P之前的A个数、PT中间的A个数、T之后的A个数之间的关系 
     6 }
     7 
     8 int main(void)
     9 {
    10   int i, j, n, flag;
    11   int a, b, c;
    12   char str[101];
    13   scanf("%d", &n);
    14   for( j=0; j<n; j++){
    15     flag=1;
    16     scanf(" %s", &str);
    17     int len = strlen(str);
    18     if( len < 3 ){//长度验证 
    19       printf("NO");
    20       if( j < n-1 ) printf("
    ");
    21       continue;
    22     }
    23     else{
    24         //找到P前只能有A或空
    25         for( i=0; i<len; i++ ){
    26           if( str[i] == 'P' )
    27             break;
    28           if( str[i] != 'A' ){
    29             printf("NO");
    30             if( j < n-1 ) printf("
    ");
    31             flag = 0;
    32             break;
    33           }
    34         }
    35         if( flag == 0 ) continue;
    36         a = i - 0;//P之前A的个数 
    37         
    38         if( len - i == 3 ){//仅剩3字符
    39           if( str[i] == 'P' && str[i+1] == 'A' && str[i+2] == 'T' ){
    40             printf("YES");
    41             if( j < n-1 ) printf("
    ");
    42             flag = 1;
    43           }
    44           else{
    45             printf("NO");
    46             if( j < n-1 ) printf("
    ");
    47             flag = 0;
    48           }
    49           continue;
    50         }
    51         else if( len - i < 3){
    52           printf("NO");
    53           if( j < n-1 ) printf("
    ");
    54           flag = 0;
    55           continue;
    56         }
    57         else{
    58           int count=0;
    59           for( i=i+1; i<len; i++ ){          
    60             if( str[i] == 'T' )
    61               break;          
    62             else if( str[i] != 'A' ){//P与A之间有其他字符
    63               printf("NO");
    64               if( j < n-1 ) printf("
    ");
    65               flag = 0;
    66             }
    67           }
    68           if( flag == 0 ) continue;
    69           b = i - a - 1;//P、T之间的A的个数 
    70           c = len - i - 1;//T之后A的个数 
    71           
    72           //检查T之后还有没有除A以外的字符 
    73           for( i=i+1; i<len; i++){
    74             if( str[i] != 'A' ){
    75               printf("NO");
    76               if( j < n-1 ) printf("
    ");
    77               flag=0;
    78               break;
    79             }
    80           }
    81         }
    82     }
    83     if( flag == 1 ) {
    84         flag = judge(a, b, c);
    85         if( flag ) printf("YES");
    86         else printf("NO");
    87     }
    88     
    89     if( j < n-1 ) printf("
    ");
    90   }
    91   
    92   return 0;
    93 }
  • 相关阅读:
    LeetCode 93. Restore IP Addresses
    LeetCode 92. Reverse Linked List II
    LeetCode 94. Binary Tree Inorder Traversal
    javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别
    java关于jdbc的配置与使用步骤
    关于php中的include html文件的问题,为什么html可以在php中执行
    yii2 无法显示debug条的问题解决方法
    elasticsearch报错expected <block end>, but found BlockMappingStart解决方法
    sysctl -p 报错问题的解决方法
    yii2 Rbac使用yii命令一键建表
  • 原文地址:https://www.cnblogs.com/EasonDongH/p/9571917.html
Copyright © 2011-2022 走看看