首页 > 编程语言 >1003 我要通过!(JAVA)

1003 我要通过!(JAVA)

时间:2022-10-17 21:08:09浏览次数:39  
标签:map arr JAVA get int 我要 && 字符串 1003


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

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

  1. 字符串中必须仅有​​P​​​、​​A​​​、​​T​​这三种字符,不可以包含其它字符;
  2. 任意形如​​xPATx​​ 的字符串都可以获得“答案正确”,其中​​x​​​ 或者是空字符串,或者是仅由字母​​A​​ 组成的字符串;
  3. 如果​​aPbTc​​​ 是正确的,那么​​aPbATca​​​ 也是正确的,其中​​a​​​、​​b​​​、​​c​​​ 均或者是空字符串,或者是仅由字母​​A​​ 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (≤10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得“答案正确”,则输出 ​​YES​​​,否则输出 ​​NO​​。

输入样例:

10
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
APT
APATTAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
NO
NO

实现代码:

import java.util.HashMap;
import java.util.Scanner;

/**
* @author yx
* @date 2022-07-12 0:50
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n=scanner.nextInt();
String[] s=new String[n];
for (int i = 0; i <n; i++) {
s[i]=scanner.next();
}
for (int i = 0; i < n; i++) {
HashMap<Character,Integer> map =new HashMap<>();
char[] arr_s=s[i].toCharArray();
int p=0;
int t=0;
map.put('P',0);
map.put('A',0);
map.put('T',0);
for (int k = 0; k <arr_s.length ; k++) {
if(arr_s[k]=='P')p=k;
if(arr_s[k]=='T')t=k;
map.put(arr_s[k],map.getOrDefault(arr_s[k],0)+1);
}
if(map.get('P')==1&&map.get('T')==1&&map.get('A')!=0&&p*(t-p-1)==(map.get('A')-p-(t-p-1))&&t-p!=1){
System.out.println("YES");
}else {
System.out.println("NO");
}
}
}
}

题目解读:

这道题目可能有点难理解,博主给大家一些小提示

​/** 需要满足一下条件: 1、’P‘,’T‘必须要有,并且都只能有一个==>p==1&&t==1 2、P和T中间的’A‘必须要有==>p-t!=1&&map.get('A')!=0 3、开头的A的个数 * 中间的A的个数 = 结尾的A的个数==>p*(t-p-1)==(map.get('A')-p-(t-p-1)) */​

标签:map,arr,JAVA,get,int,我要,&&,字符串,1003
From: https://blog.51cto.com/u_15754851/5764383

相关文章

  • 1002 写出这个数(JAVA)
    读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。输出格式:在一行......
  • 1001 害死人不偿命的(3n+1)猜想(JAVA)
    卡拉兹(Callatz)猜想:对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在1950......
  • 1005 继续(3n+1)猜想(JAVA)
    卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对n=......
  • 1004 成绩排名(JAVA)
    读入n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。输入格式:每个测试输入包含1个测试用例,格式为第1行:正整数n第2行:第1个学生的姓名......
  • JavaGUI编程个人笔记
    GUI编程(了解)组件窗口弹窗面板文本框列表框按钮图片监听事件鼠标事件键盘事件破解工具简介Gui开发核心技术:SwingAWT界面不美观需要jre环境但还要学习......
  • 【Java】Java中的零拷贝
    物理内存计算机物理内存条的容量,比如我们买电脑会关注内存大小有多少G,这个容量就是计算机的物理内存。虚拟内存操作系统为每个进程分配了独立的虚拟地址空间,也就是虚拟......
  • 1010 一元多项式求导(JAVA)
    设计函数求一元多项式的导数。(注:xn(n为整数)的一阶导数为nxn−1。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出......
  • 1045 快速排序(JAVA)
    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边。给定划分后的N个......
  • 1006 换个格式输出整数(JAVA)
    让我们用字母​​B​​​来表示“百”、字母​​S​​​表示“十”,用​​12...n​​​来表示不为零的个位数字​​n​​​(<10),换个格式来输出任一个不超过3位的正整......
  • 1009 说反话(JAVA)
    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中......