PAT乙级——1003

PAT乙级——1003题目:我要通过!(20分)“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送——只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。得到“答案正确”的条件是:字符串中必须仅有P、A、T这三种字符,不可以包含其它字符;任意形如xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅由字母A…

大家好,又见面了,我是你们的朋友全栈君。

题目: 我要通过!(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 

题目分析

emmmmm,这个题目还是有点小难度的,他需要一定的推理才可以达到结果。由条件一和二我们知道形如:

  PAT
  APATA
  AAPATAA
  AAAPATAAA

都是对的,也就是中间一个A加上左右等数量的A成立。
  根据条件三,由于PAT — 对于 aPbTc 来说,ac是空,b是A。所以 PAAT 是正确的。aPbATca,则,如PAAAAAT中间加多少个A都是正确的。
APATA —— 对于aPbTc来说,abc都是A。aPbATca,所以 APAATAA 是正确的。这个时候就需要找规律做类推了。
  我们需要观察A的个数,一开始,对于PAT,左边的A和右边的A都是0,中间的是1,左x中=右
  然后的APATA,左中右都是1,左x中=右
  再然后,APAATAA,左1,中2,右2,左x中=右
  (一开始我研究输入输出完全看不懂,后来研究了好久有经过大神提醒可以找规律才发现了这个,发现还是需要一定的逻辑推理能力才行啊

代码实现

并没有AC,18分,有一个用例没有通过,不过我暂时想不到哪里是没有考虑到的,如有人发现,希望可以告诉我一下。

//太粗心了,我把大写的NO写成了No,找了快俩小时找不到问题, //千万注意这种小细节,要人命 import java.util.Scanner; public class Main { 
     public static void main(String []args){ 
     //这是个规律推导题,P和T有且只能有一个,若出现这样的 1P2T3 ,则A的个数为1*2=3 Scanner in = new Scanner(System.in); int n =in.nextInt(); String input[]=new String[n]; String output[]=new String[n]; for(int i =0;i<n;i++) { 
     input[i] = in.next(); int count1=0; int count2=0; int count3=0; int countP=0; int countT=0; int mark =0; char temp[] = input[i].toCharArray(); for (int k = 0; k < temp.length; k++) { 
     mark++;//标记是否符合小循环内的要求,没有跳出 if(temp[k]!='P'&&temp[k]!='A'&&temp[k]!='T'){ 
     output[i]="NO"; break; } if(temp[k]=='P'){ 
     countP++; if(countT==1&&countP==0){ 
     //T在P前面出现的话,输入错误 output[i]="NO"; break; } if (countP==2){ 
     //P出现两次,输入错误 output[i]="NO"; break; } } if(temp[k]=='T'){ 
     countT++; if(countP==0||count2==0){ 
     //T前面没有出现P和A的话,输入错误 output[i]="NO"; break; } if (countT==2){ 
     //T出现两次,错误 output[i]="NO"; break; } } if(temp[k]=='A'){ 
     if(countP==0){ 
     count1++; } if(countP==1&&countT==0){ 
     count2++; } if(countT==1){ 
     count3++; } } } //count2不能为零 if(count1*count2==count3&&count2!=0) output[i]="YES"; if(mark==temp.length&&count1*count2!=count3) output[i]="NO"; } for(int i=0;i<n;i++) System.out.println(output[i]); } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142786.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月22日 下午11:20
下一篇 2022年5月22日 下午11:20


相关推荐

  • C++通过TinyXML类库读写XML文件

    C++通过TinyXML类库读写XML文件TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包含关系。

    2022年4月30日
    37
  • C/C++ 引用作为函数的返回值

    C/C++ 引用作为函数的返回值语法 类型 amp 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 amp 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include lt iostream gt usingnamespa floattemp floatfn1 floatr

    2026年3月26日
    2
  • 快速排序(Python实现)

    一、算法介绍快速排序是经常考查到的排序算法,这里对快排算法做一下总结。快速排序是“交换”类的排序,它通过多次划分操作实现排序!以升序为例,其执行流程可以概括为:每一趟排序选择当前所有子序列的一个关键字(通常是第一个)作为枢轴量,将子序列中比枢轴量小的移到枢轴前边,比枢轴大的移到枢轴后边,具体过程是一个交替扫描和交换的过程。当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列,…

    2022年4月6日
    54
  • java中方法的定义

    java中方法的定义

    2022年3月3日
    352
  • tensorflow 安装GPU版本,个人总结,步骤比较详细

    tensorflow 安装GPU版本,个人总结,步骤比较详细nbsp nbsp nbsp nbsp 手把手教你 windows 安装 tensorflow 的教程参考另一篇博文 http mp blog csdn net postedit nbsp nbsp 此博文是在上文安装 CUDA cuDNN 的基础上的个人填坑总结 欢迎指教 CUDACUDA ComputeUnifi 是显卡厂商 NVIDIA 推出的运算平台 CUDA 是一种由 NVIDIA

    2026年3月17日
    2
  • dede添加会员功能听语音

    dede添加会员功能听语音

    2021年9月25日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号