zoukankan      html  css  js  c++  java
  • PAT 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
    
      1 #include<stdio.h>
      2 #include<string.h>
      3 int main(){
      4     /*
      5      后前面A的数目/P前面A的数目等于P与A中间的A的数目。 
      6      办法有点笨 
      7     */
      8     int n;
      9     scanf("%d",&n);
     10     char c[100];
     11     int i;
     12     int b;//数组长度 
     13     float a1=0;//P前面A的数目 
     14     float a2=0;//P后面,T中间,A的数目 
     15     float a3=0;//T后面A的数目 
     16     int k1=0;//P的数目 
     17     int k2=0;//T的数目 
     18     int p;//P的位置 
     19     int t;//T的位置 
     20     int y;//跳出第二层循环 
     21     while(n--)
     22     {
     23         y = 0;
     24         k1 = 0;
     25         k2 = 0;
     26         a1 = 0;
     27         a2 = 0;
     28         a3 = 0;
     29         scanf("%s",c);
     30         b = strlen(c);
     31         /*
     32             判断是不是有多个P或T以及P与T的位置 
     33         */
     34         for(i=0;i<b;i++)
     35         {
     36             if(c[i]=='P')
     37             {
     38                 p = i;
     39                 k1++;
     40             }
     41             if(c[i]=='T')
     42             {
     43                 t = i;
     44                 k2++;
     45             }
     46         }
     47         if(k1!=1||k2!=1)
     48         {
     49             printf("NO
    ");
     50             continue;
     51         }
     52         /*
     53             计算P之前A的数目,同时若不是A字符输出NO 
     54         */ 
     55         for(i=0;i<p;i++)
     56         {
     57             if(c[i]=='A')
     58             {
     59                 a1++;
     60             }
     61             else
     62             {
     63                 printf("NO
    ");
     64                 y=1;
     65                 break;
     66             }
     67             
     68         }
     69         if(y)
     70         {
     71             continue;
     72         }
     73         /*
     74         判断P与T之间的A的数目,若不是A字符输出NO  
     75         */ 
     76         for(i=p+1;i<t;i++)
     77         {
     78             if(c[i]=='A')
     79             {
     80                 a2++;
     81             }
     82             else{
     83                 printf("NO
    ");
     84                 y=1;
     85                 break;
     86             }
     87         }
     88         if(y)
     89         {
     90             continue;
     91         }
     92         /*
     93             计算T之后A的数目,不是字符A输出NO 
     94         */ 
     95         for(i=t+1;i<b;i++)
     96         {
     97             if(c[i]=='A')
     98             {
     99                 a3++;
    100             }
    101             else{
    102                 printf("NO
    ");
    103                 break;
    104             }
    105         }
    106         /*
    107         判断条件 
    108         */ 
    109         if(a1!=0)
    110         {
    111             if(a3/a1!=a2)
    112             {
    113                 printf("NO
    ");
    114                 continue;
    115             }
    116         
    117         }
    118         /*
    119         若a1是0则a3也一定是0 
    120         */ 
    121         else
    122         {
    123             if(a3!=0)
    124             {
    125                 printf("NO
    ");
    126                 continue;
    127             }
    128         }
    129         if(a2==0)
    130         {
    131             printf("NO
    ");
    132             continue;
    133         }
    134         /*
    135         其他条件都成立 
    136         */ 
    137         printf("YES
    "); 
    138     }
    139 } 
  • 相关阅读:
    自制电脑红外遥控接收器(PC软解码) 转
    .NET Micro Framework介绍
    如何测试移动web?
    自行开发高效精简的二进制序列化库(支持精简框架集) 转
    35个优秀的电子商务网站界面
    .Net Micro Framework中的线程
    《肖申克的救赎》 阅后小记
    分享 MSDN 下载工具(Word/PDF)
    OEA ORM中的分页支持
    OEA 中的多国语言实现
  • 原文地址:https://www.cnblogs.com/lolybj/p/6145019.html
Copyright © 2011-2022 走看看