PAT1014 福爾摩斯的約會 Java 脫坑手記
阿新 • • 發佈:2021-01-13
PAT1014 福爾摩斯的約會 Java 脫坑手記
題目分析
題目給出4行字串
針對前兩個字串得出星期 與 小時
- 星期: 第 1 對相同的大寫英文字母
- 在相同的位置是相同的大寫英文字母
- 因為一週七天,隱含 大寫英文字母範圍是 A-G
- 對A-G進行Day的轉換輸出
- 小時: 第2對相同的字元 (一天 0—23 由 0-9和A-N表示)
- 在相同的位置相同的字元
- 字元範圍在 0-9 以及 A-N
- 限定格式 DAY HH:MM 0-9需要進行補 0 與A-N的轉化10-23
針對後兩個字串得出分鐘
- 分鐘: 後面兩字串第 1 對相同的英文字母
- 在相同的位置的相同英文字母
- 英文字母範圍 a-z或者A-Z
- 分鐘由字串的位置確定,缺位數要 補 0
input: 4 行中分別給出 4 個非空、不包含空格、且長度不超過 60 的字串
output:約會的時間,格式為 DAY HH:MM。
MON 星期一 TUE 星期二 WED 星期三 THU 星期四 FRI 星期五 SAT 星期六 SUN 星期日
題目輸入保證每個測試存在唯一解。
程式碼
import java.util.Scanner;
/**
* @ClassName $1014
* @Description: https://pintia.cn/problem-sets/994805260223102976/problems/994805308755394560
* 1014 福爾摩斯的約會 (20分)
*
* @Author: zyb
* @Date: 2021-01-06
* @Version:v1.0
*/
public class $1014 {
public static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
String h1 = input.nextLine();
String h2 = input.nextLine();
String h3 = input.nextLine();
String h4 = input.nextLine();
int number = 0;
int length = h1.length() < h2.length() ? h1.length() : h2.length();
String[] week = {"MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"};
for (int i = 0; i < length; i++) {
/*第一個對相等的大寫字母代表 周幾,在同位置 且一週七天 A-G*/
if (h1.charAt(i) >= 'A' && h1.charAt(i) <= 'G' && h1.charAt(i) == h2.charAt(i)) {
System.out.print(week[h1.charAt(i) - 'A'] + " "); //輸出 周
number = i;
break;
}
}
/* 查詢第二對相同的字元 計算小時*/
for (int i = number + 1; i < length; i++) {
/*24小時為0-9 以及A-N表示*/
if (h1.charAt(i) == h2.charAt(i)) {
if (h1.charAt(i) >= '0' && h1.charAt(i) <= '9') {
System.out.print("0" + h1.charAt(i) + ":"); //輸出 小時(前端補上0)
break;
}
if (h1.charAt(i) >= 'A' && h1.charAt(i) <= 'N') {
System.out.print(h1.charAt(i) - 'A' + 10 + ":"); //輸出 小時(超過十 英文字母轉化)
break;
}
}
}
length = h3.length() < h4.length() ? h3.length() : h4.length();
/*進行分鐘計算 查詢一對相等的英文字母(包含大小寫)下標為分鐘點*/
for (int i = 0; i < length; i++) {
/*補充上 && 優先順序 高於 || 右邊||運算要加上括號 進行優先運算*/
if (h3.charAt(i) == h4.charAt(i) && ((h3.charAt(i) >= 'A' && h3.charAt(i) <= 'Z') ||
(h3.charAt(i) >= 'a' && h3.charAt(i) <= 'z'))) {
if (i < 10)
System.out.print("0" + i); //輸出 分鐘(前端補上0)
else
System.out.print(i);
break;
}
}
}
}
記下 筆記: && 與 || && 優先順序高於
坑死的錯誤