天天看點

PAT 1014 乙級 java實作 福爾摩斯的約會

題目描述:

大偵探福爾摩斯接到一張奇怪的字條:“我們約會吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大偵探很快就明白了,字條上奇怪的亂碼實際上就是約會的時間“星期四 14:04”,因為前面兩字元串中第1對相同的大寫英文字母(大小寫有區分)是第4個字母'D',代表星期四;第2對相同的字元是'E',那是第5個英文字母,代表一天裡的第14個鐘頭(于是一天的0點到23點由數字0到9、以及大寫字母A到N表示);後面兩字元串第1對相同的英文字母's'出現在第4個位置(從0開始計數)上,代表第4分鐘。現給定兩對字元串,請幫助福爾摩斯解碼得到約會的時間。

輸入格式: 

輸入在4行中分别給出4個非空、不包含空格、且長度不超過60的字元串。

輸出格式: 

在一行中輸出約會的時間,格式為“DAY HH:MM”,其中“DAY”是某星期的3字元縮寫,即MON表示星期一,TUE表示星期二,WED表示星期三,THU表示星期四,FRI表示星期五,SAT表示星期六,SUN表示星期日。題目輸入保證每個測試存在唯一解。 

輸入樣例: 

3485djDkxh4hhGE

2984akDfkkkkggEdsb

s&hgsfdk

d&Hyscvnm

輸出樣例:

THU 14:04

解題思路:

DAY、HH、MM 可這樣得到:

1.DAY:對前兩行字元串逐位比對,找到第一次在相同位置出現的A到G之間的大寫字母,求得該字母與 A 的距離,以該距離為星期數組的下标,進而得到星期DAY

2.HH :在1.的基礎上繼續向後掃描,遇到第一對相同位置的 0到 9,或者 A 到 N 。分别轉為 0到 9,10到 23。

3.MM  : 掃描後兩行,找第一對相同位置上出現的 A到Z, 或者 a 到 z 。其位置即為MM 。此處要注意的是輸出格式。

代碼走起~ 

package pat;

import java.util.Scanner;

public class B1014 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		// 星期數組
		String week[] = { "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN" };

		// 輸入
		String s1 = sc.next();
		int n1 = s1.length();
		String s2 = sc.next();
		int n2 = s2.length();
		String s3 = sc.next();
		int n3 = s3.length();
		String s4 = sc.next();
		int n4 = s4.length();

		// 獲得星期
		int i;
		for (i = 0; i < n1 && i < n2; i++) {

			if (((s1.charAt(i)) == (s2.charAt(i))) && s1.charAt(i) >= 'A' && s2.charAt(i) <= 'G') {
				System.out.print(week[s1.charAt(i) - 'A']);// 輸出星期
				System.out.print(" ");
				break;

			}
		}
		// 繼續向後尋找 “時”
		int k = i + 1;
		for (i = k; i < n1 && i < n2; i++) {
			if (s1.charAt(i) == s2.charAt(i)) {
				if (s1.charAt(i) >= '0' && s1.charAt(i) <= '9') {
					// 輸出0到9之間的數
					System.out.print(s1.charAt(i) - '0');
 					break;
				}
				if (s1.charAt(i) >= 'A' && s1.charAt(i) <= 'N') {
					// 輸出10到23之間的數
					System.out.print(s1.charAt(i) - 'A' + 10);
 					break;
				}

			}
		}
		// 對下兩行尋找,輸出“分”
		int i1;
		for (i1 = 0; i1 < s3.length() && i1 < s4.length(); i1++) {
			if (s3.charAt(i1) == s4.charAt(i1)) {
				if ((s3.charAt(i1) >= 'A' && s3.charAt(i1) <= 'Z') || (s3.charAt(i1) >= 'a' && s3.charAt(i1) <= 'z')) {
					//System.out.print(i1);
					System.out.printf(":%02d", i);
					break;
				}
			}

		}

	}

}