PAT乙级1002.写出这个数1003.我要通过

PAT乙级题解
本文提供了两道PAT乙级编程题的解答思路及Java代码实现,包括读取自然数计算各位数字之和并用拼音输出,以及判断字符串是否符合特定模式。

 

保持优良习惯day1
 

 

 

登录半小时还没登上蓝桥 学校的网越发没救了 
我选择PAT(乙级)

 

 

 

1002.写出这个数

 

读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

 

输入格式:每个测试输入包含1个测试用例,即给出自然数n的值。这里保证n小于10100。

 

 
输出格式:在一行内输出n的各位数字之和的每一位,拼音数字间有1空格,但一行中最后一个拼音数字后没有空格。
输入样例:
 
1234567890987654321123456789
输出样例:
 
yi san wu
 

AC代码:

import java.util.Scanner;
public class Main {
 static int sum=0;
 public static void main(String[] args) {
  Scanner in=new Scanner(System.in);
  String n=in.next();
  for(int i=0;i<n.length();i++) {
   sum+=n.charAt(i)-48;
  }
  print(sum);
 }
 public static void print(int n) {
  if(n==0) return;
  int k=n%10;
  print(n/10);
  choice(k);
  if(n!=sum) {
   System.out.print(" ");
  }
 }
 public static void choice(int x) {
  switch (x) {
  case 0:
   System.out.print("ling");
   break;
  case 1:
   System.out.print("yi");
   break;
  case 2:
   System.out.print("er");
   break;
  case 3:
   System.out.print("san");
   break;
  case 4:
   System.out.print("si");
   break;
  case 5:
   System.out.print("wu");
   break;
  case 6:
   System.out.print("liu");
   break;
  case 7:
   System.out.print("qi");
   break;
  case 8:
   System.out.print("ba");
   break;
  case 9:
   System.out.print("jiu");
   break;
  }
 }
}
总结:拿到题目第一时间想的是用java大数类的方法,反而写的很麻烦,实际上用String类型再转为数组更好做
思维太局限!!
 

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。

输入样例:
8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA
输出样例:
 
YESYESYESYESNONONONO
 
思路:刚拿到题目其实没看懂第三个条件是什么意思,后来也看了网上其他大佬的解释加笔算才明白题目意思。
首先,题目的三个条件要都满足才算答案正确,然后我倒推了第三条件,它的意思是满足第三条件倒推以后可以转为第二条件的形式(第一次写 感觉表达不清晰)
举个栗子//题目给出的输入样例中的“AAPAATAAAA”是正确答案,将这个看为aPbATca形式,则a:AA b:A ca:AAAA 可以得到c:AA 因为题中第三条件得到aPbTc形式,即AAPATAA,满足了第二条件的xPATx形式,因此这个是正确答案。
再举个栗子//题中的输入样例中的“APAAATAA” 倒推后得到的形式是:APAATA->APAT不满足xPATx的形式,所以是错误答案
综合分析以后我们可以得到结论:a中A的数量乘上b中A的数量等于c中A的数量 即a.length()*b.length()=c.length().
 
下面给出AC代码:
 
import java.util.Scanner;
public class PATbasic1003 {
 public static void main(String[] args) {
  Scanner in=new Scanner(System.in);
  int N=in.nextInt();
  in.nextLine();//取上一个next之后留下的回车
  String gets[]=new String[N];
  for(int i=0;i<N;i++) {
   gets[i]=in.nextLine();
  }
  for(int i=0;i<N;i++) {
   judge(gets[i]);
  }
 }
 public static void judge(String s) {
  //首先判断条件一
  boolean P=true;
  boolean A=true;
  boolean T=true;
  for(int i=0;i<s.length();i++) {
   char c=s.charAt(i);
   if(c=='P') {
    P=false;
   } else if (c=='A') {
    A=false;
   } else if (c=='T') {
    T=false;
   } else {
    System.out.println("NO");
    return;
   }
  }
  if(P || A || T) {
   System.out.println("NO");
   return;
  }
  //判断条件二三
  int i=s.indexOf("P");
  int j=s.indexOf("T");
  //a*b=c
  int a=i;
  int b=j-i-1;
  int c=s.length()-j-1;
  if(a*b==c) {
   System.out.println("YES");
  } else {
   System.out.println("NO");
  }
 }
}
备注:PAT中提交java代码是不可以有注释的 不然会编译错误

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值