PAT A 1100 JAVA

本文提供了一道PAT1100编程题目的解答方案,通过字符串与整数之间的转换实现特定的数字编码和解码。代码使用了Java语言,并涉及HashSet用于存储特定的数字编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class PAT1100 {
    static Set<String> set = new HashSet<>();
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = Integer.valueOf(sc.nextLine());
        String[] ss = new String[N];
        for (int i = 0; i < N; i++) {
            ss[i] = sc.nextLine();
        }
        for (int i = 1; i <= 12; i++) {
            set.add(sec_digit_exchange(i));
        }
        for (int i = 0; i < N; i++) {
            if (ss[i].charAt(0) >= '0' && ss[i].charAt(0) <= '9') {
                System.out.println(exchange(Integer.valueOf(ss[i])));
            } else {
                System.out.println(exchange(ss[i]));
            }
        }
    }

    private static int exchange(String s) {
        String[] spl = s.split(" ");
        if (spl.length == 1) {
            if (set.contains(spl[0])) {
                return 13 * sec_digit_exchange(spl[0]);
            }
            return first_digit_exchange(spl[0]);
        }
        if (spl.length == 2) {
            return sec_digit_exchange(spl[0]) * 13 + first_digit_exchange(spl[1]);
        }
        return -1;
    }

    private static String exchange(int n) {
        if (n / 13 > 0 && n % 13 == 0) {
            String s1 = sec_digit_exchange(n / 13);
            return s1;
        }
        if (n / 13 > 0) {
            String s1 = sec_digit_exchange(n / 13);
            String s2 = first_digit_exchange(n % 13);
            return s1 + " " + s2;
        } else {
            String s1 = first_digit_exchange(n);
            return s1;
        }

    }

    private static int first_digit_exchange (String s) {
        if (s.equals("jan")) return 1;
        if (s.equals("feb")) return 2;
        if (s.equals("mar")) return 3;
        if (s.equals("apr")) return 4;
        if (s.equals("may")) return 5;
        if (s.equals("jun")) return 6;
        if (s.equals("jly")) return 7;
        if (s.equals("aug")) return 8;
        if (s.equals("sep")) return 9;
        if (s.equals("oct")) return 10;
        if (s.equals("nov")) return 11;
        if (s.equals("dec")) return 12;
        if (s.equals("tret")) return 0;
        return -1;
    }

    private static int sec_digit_exchange (String s) {
        if (s.equals("tam")) return 1;
        if (s.equals("hel")) return 2;
        if (s.equals("maa")) return 3;
        if (s.equals("huh")) return 4;
        if (s.equals("tou")) return 5;
        if (s.equals("kes")) return 6;
        if (s.equals("hei")) return 7;
        if (s.equals("elo")) return 8;
        if (s.equals("syy")) return 9;
        if (s.equals("lok")) return 10;
        if (s.equals("mer")) return 11;
        if (s.equals("jou")) return 12;
        if (s.equals("tret")) return 0;
        return -1;
    }

    private static String first_digit_exchange (int n) {
        if (n == 1) return "jan";
        if (n == 2) return "feb";
        if (n == 3) return "mar";
        if (n == 4) return "apr";
        if (n == 5) return "may";
        if (n == 6) return "jun";
        if (n == 7) return "jly";
        if (n == 8) return "aug";
        if (n == 9) return "sep";
        if (n == 10) return "oct";
        if (n == 11) return "nov";
        if (n == 12) return "dec";
        if (n == 0) return "tret";
        return null;
    }

    private static String sec_digit_exchange (int n) {
        if (n == 1) return "tam";
        if (n == 2) return "hel";
        if (n == 3) return "maa";
        if (n == 4) return "huh";
        if (n == 5) return "tou";
        if (n == 6) return "kes";
        if (n == 7) return "hei";
        if (n == 8) return "elo";
        if (n == 9) return "syy";
        if (n == 10) return "lok";
        if (n == 11) return "mer";
        if (n == 12) return "jou";
        if (n == 0) return "tret";
        return null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值