保持优良习惯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代码是不可以有注释的 不然会编译错误