1003. 我要通过!(20)
---恢复内容开始---
题目链接
https://www.patest.cn/contests/pat-b-practise/1003
题目来源
PAT乙级真题及训练集
PAT (Basic Level) Practise (中文)
如果做题的人学过编译原理就好了。这题其实定义了一种字符串或者说是定义了一种“语言”。用编译中文法那一套东西就是
s-> XPATX
X-> $ | AX
XPATX-> XPAATXX
其中s是开始符,P,A,T是终止符。
用一句话描述就是P前面A的个数 × P和T中间A的个数 = T后面A的个数,而且P,A,T至少出现一次。
(java学的不好,代码就凑合着看吧)
import java.util.*;
public class Main{
public static void main(String argu[]){
Scanner read = new Scanner(System.in);
int cont = 0;
String in = "";
String ans = "";
if(read.hasNext()){
cont = read.nextInt();
read.nextLine();
}
//System.out.print(cont);
int p = 0, a= 0, t = 0, flag = 1;
while(cont >= 0){
p = 0;
a = 0;
t = 0;
flag = 1;
in = read.nextLine();
for(int i=0; i<in.length(); ++i){
if(in.charAt(i) == 'P'){
p = i;
}else if(in.charAt(i) == 'T'){
t = in.length() - i - 1;
a = i - p - 1;
}else if(in.charAt(i) == 'A'){
}else{
ans = "NO";
flag = 0;
//System.out.print(in.charAt(i));
break;
}
}
if(p * a == t && flag == 1 && a >= 1){
ans = "YES";
}else{
ans = "NO";
}
cont --;
System.out.println(ans);
}
}
}
public class Main{
public static void main(String argu[]){
Scanner read = new Scanner(System.in);
int cont = 0;
String in = "";
String ans = "";
if(read.hasNext()){
cont = read.nextInt();
read.nextLine();
}
//System.out.print(cont);
int p = 0, a= 0, t = 0, flag = 1;
while(cont >= 0){
p = 0;
a = 0;
t = 0;
flag = 1;
in = read.nextLine();
for(int i=0; i<in.length(); ++i){
if(in.charAt(i) == 'P'){
p = i;
}else if(in.charAt(i) == 'T'){
t = in.length() - i - 1;
a = i - p - 1;
}else if(in.charAt(i) == 'A'){
}else{
ans = "NO";
flag = 0;
//System.out.print(in.charAt(i));
break;
}
}
if(p * a == t && flag == 1 && a >= 1){
ans = "YES";
}else{
ans = "NO";
}
cont --;
System.out.println(ans);
}
}
}
---恢复内容结束---