pat乙级-1014(java)

package com.sort.test.pat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

/**
 * @Author: Yang_f
 * @CreateTime: 2024-08-10
 * @Description:因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;
 * 第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、
 * 以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。
 */
public class b_1014 {
    static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    static String next() throws IOException {
        return in.readLine();
    }
    private static final int A = 16;
    public static void main(String[] args) throws IOException {
        //前两行
        StringTokenizer st = new StringTokenizer(next());
        String s1 = st.nextToken();
        char[] chars1 = s1.toCharArray();

        st = new StringTokenizer(next());
        String s2 = st.nextToken();
        char[] chars2 = s2.toCharArray();

        int len1 = Math.min(chars1.length, chars2.length);
        //计算星期和小时
        Map<String, Integer> map = selectIndex(chars1, chars2, len1);
        int day = map.get("day") % 7;
        String week = null; //计算星期
        switch (day) {
            case 0:
                week = "SUN";
                break;
            case 1:
                week = "MON";
                break;
            case 2:
                week = "TUE";
                break;
            case 3:
                week = "WED";
                break;
            case 4:
                week = "THU";
                break;
            case 5:
                week = "FRI";
                break;
            case 6:
                week = "SAT";
                break;
        }
        //计算小时
        int h = map.containsKey("h2") ? map.get("h2") + 9 : map.get("h1");
        StringBuilder hh = new StringBuilder();
        hh = h < 10 ? hh.append("0").append(h) : hh.append(h);
        //后两行
        st = new StringTokenizer(next());
        String s3 = st.nextToken();
        char[] chars3 = s3.toCharArray();
        st = new StringTokenizer(next());
        String s4 = st.nextToken();
        char[] chars4 = s4.toCharArray();
        int len2 = Math.min(chars3.length, chars4.length);
        //计算分钟
        int m = selectIndex2(chars3, chars4, len2);
        StringBuilder mm = new StringBuilder();
        mm = m < 10 ? mm.append("0").append(m) : mm.append(m);

        System.out.println(week + " " + hh + ":" + mm);
    }
    private static int selectIndex2(char[] chars3, char[] chars4, int len) {
        int in = -1;
        for (int i = 0; i < len; i++) {
            if (chars3[i] == chars4[i] &&
                    ('A' <= chars3[i] && chars3[i] <= 'Z'||
                    'a' <= chars3[i] && chars3[i] <= 'z')
            ) return i; //返回第一个相同的数的下标
        }
        return in;
    }

    private static Map<String, Integer> selectIndex(char[] chars1, char[] chars2, int len) {
        Map<String, Integer> map = new HashMap<>();
        for (int i = 0; i < len; i++) {
            if (chars1[i] == chars2[i]) {
                if (chars1[i] - '0' < 10 && !map.containsKey("h1")){
                    map.put("h1", chars1[i] - '0'); //把第一个0-9的数存值 表示小时(没有n3时)
                }
                else if (chars1[i] - '0' < 31 && !map.containsKey("day")){
                    map.put("day", chars1[i] - '0' - A); //把第一个A-N的数存值 表示星期
                }else if(chars1[i] - '0' < 31 && !map.containsKey("h2")){
                    map.put("h2", chars1[i] - '0' - A); //把第二个A-N的数存值 表示小时
                }
            }
        }
        return map;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值