PAT(乙级)1044 火星数字 Java小白练习题答案(满分)
1.题目如下
2.答案代码如下
package pat_1044;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.HashMap;
public class testPractice1044 {
public static void main(String[] args) {
Scanner scn1=new Scanner(System.in);
String str1=scn1.nextLine();
//这里是方便对应数组和字符串的关系,因此两个数组
String[] num1= {"tret","jan","feb","mar", "apr", "may", "jun", "jly","aug", "sep", "oct", "nov", "dec"};
String[] num2= {"tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};
//利用HashMap,在循环时可直接利用得到的字符串输出对应整型数字
HashMap<String,Integer> mapLow=new HashMap<String,Integer>();
HashMap<String,Integer> mapHigh=new HashMap<String,Integer>();
for(int i=0;i<13;i++) {
mapLow.put(num1[i], i); //低位
}
for(int i=1;i<13;i++) {
mapHigh.put(num2[i-1], i);//高位
}
String[] s1=new String[100];
int num=Integer.parseInt(str1);
//将控制台输入放入字符串数组中
for(int i=0;i<num;i++) {
String str=scn1.nextLine();
s1[i]=str;
}
//遍历判断
for(int i=0;i<num;i++) {
//Character.isDigit(char x) 判断一个字符是不是数字
if(Character.isDigit(s1[i].charAt(0))) {
int temp=Integer.parseInt(s1[i]);
int s=temp/13;
int k=temp%13;
if(s!=0 ) {
if(k!=0) { //这里要仔细区分,按照题目的要求,如果有高位,但低位是0的话,应该不打印tret;
System.out.println(num2[s-1]+" "+num1[k]);
}
else {
System.out.println(num2[s-1]);
}
}
else {
System.out.println(num1[k]); //只有当高位为0时,低位为0才打印tret
}
}
else {
//System.out.println(s1[i]);
String[] temp1=new String[100];
temp1=s1[i].split(" ");
//System.out.println(temp1[0]);
int nums1=0;
int sum=0;
//System.out.println(temp1.length);
for(String x:temp1) {
if(isHave(num2,x)) {
nums1=mapHigh.get(x);
sum=sum+nums1*13;
}
else{
nums1=mapLow.get(x);
sum=sum+nums1;
}
}
System.out.println(sum);
}
}
}
public static boolean isHave(String[] str,String s){
int i = str.length;
while (i-- > 0){
if(str[i] .equals(s)){ //这里只能够用equals,字符串不能用“==”
return true;
}
}
return false;
}
}
3.感谢观看
若有没考虑到的情况,或者您有更好的解决方法和策略,欢迎在评论区给出建议!感谢观看!