浙江大学PAT (Basic Level) Practice (中文)1003我要通过!JAVA代码实现及其规律分析
2019-03-02 00:04
489 查看
1003
我要通过!
这道题和1001,1002比起来难度其实并没有什么差别,我个人认为这道题主要是在于读懂题目的要求:
1、题目要求字符串中只能含有‘P’,‘A’,‘T’三种字符。
2、xPATx形式的字符串是正确的字符串,这条规则要求:
①‘P’和‘T’之间至少要有1个‘A’字符的存在
②类似PAT,APATA,AAPATAA,AAAPATAAA等等这些首尾‘A’数量相等的字符串是正确的
3、如果 aPbTc 是正确的,那么 aPbATca 也是正确的。
这句话稍微有些难理解,但是我们不妨按照上面第二条规则的要求推理一下:
①首先PAT是正确的,那么PAAT,PAAAT等等,这些也就都是正确的了
②APATA是正确的,那么APAATAA就是正确的
③AAPATAA是正确的,那么AAPAATAAAA就是正确的
④接下来用上面三点推出来的结果当做前提来看
APAATAA是正确的,那么APAAATAAA是正确的
AAPAATAAAA是正确的,那么AAPAAATAAAAAA是正确的
到了这里基本上的规律就可以总结出来了:
设X是P之前A的数量,Y是P和T中间A的数量,Z是T之后的A的数量
那么这三者满足以下关系式:
X*Y=Z
特别地,当Y=0时,字符串不满足要求即为不正确字符串
且P和T都有且只有一个,多了不行,少了不行,并且P要在T之前出现
到了现在,相信大家也就都理解了这道题了
不过其实这道题我觉得使用正则表达式是比较简单的解法,但是相信大多数和我一样刚接触编程没多久的萌新都对正则表达式没有什么了解,所以我接下来的代码实现用的是比较繁琐的多重if判断情况,虽然代码量较多,但是应该比较浅显易懂。
话不多说,接下来就直接贴代码了:
import java.util.Scanner; class pat { public char a[]=new char[101]; pat(String s) { a=s.toCharArray(); } } public class Main { public static void main (String[]args) { pat P[]=new pat[101]; int n; String temp; Scanner input=new Scanner(System.in); n=input.nextInt(); for(int i=0;i<n;i++) { temp=input.next(); P[i]=new pat(temp); } for(int i=0;i<n;i++) { System.out.println(checkOut(P[i])); } } public static String checkOut(pat p) { int pNumber=0; int tNumber=0; int sA=0;//位于P之前的A的数量 int mA=0;//位于中间的A的数量 int fA=0;//位于T之后的A的数量 for(char item: p.a) { if((item!='P')&&(item!='A')&&(item!='T')) { return "NO"; } if(item=='P') { pNumber++; if(pNumber>=2) { return "NO"; } if((tNumber>0)&&(pNumber==0)) { return "NO"; } } if(item=='T') { tNumber++; if(tNumber>=2) { return "NO"; } } if(item=='A') { if(pNumber==0) { sA++; } if((pNumber==1)&&(tNumber==0)) { mA++; } if((pNumber==1)&&(tNumber==1)) { fA++; } } } if((sA*mA)==fA) { if((pNumber==0)||(tNumber==0)) { return "NO"; } if(mA==0) { return "NO"; } return "YES"; } else { return "NO"; } } }
相关文章推荐
- 浙江大学PAT (Basic Level) Practice (中文)1014福尔摩斯的约会JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1006换个格式输出整数JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1018锤子剪刀布JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1007素数对猜想JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1004成绩排名JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1017A除以BJAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1009说反话JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1008数组元素循环右移问题JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1010一元多项式求导JAVA实现代码及坑点分析
- 浙江大学PAT (Basic Level) Practice (中文)1012数字分类JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1015德才论JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1016部分A+BJAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1005继续(3n+1)猜想JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1013数素数JAVA实现代码及分析
- 浙江大学PAT (Basic Level) Practice (中文)1011A+B 和 CJAVA实现代码及分析
- PAT (Basic Level) Practice (中文)1003 我要通过!
- PAT (Basic Level) Practise (中文) 1003.我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)