CPE UVA12019-Doom's Day Algorithm[JAVA]

最後更新於 2021 年 5 月 21 日

題目原文https://onlinejudge.org/index.php?option=onlinejudge&Itemid=8&page=show_problem&problem=3170

題目概要:輸出指定日期發生在2011年的星期幾。

Input
第一行為資料筆數。
每筆資料都有2個數值:M、D
M代表月份(從1到12)
D代表日期(從1到31)。

Output
輸出該日期發生在2011年的星期幾。
每週的星期幾是:星期一,星期二,星期三,星期四,星期五,星期六和星期日。

Sample Input
8
1 6
2 28
4 5
5 26
8 1
11 1
12 25
12 31

Sample Output
Thursday
Monday
Tuesday
Thursday
Monday
Tuesday
Sunday
Saturday

由Sample Input的1/6為星期四往回推算可以得知1/1為星期六

首先我們需要宣告兩個陣列,一個用於存放2011年每個月份的天數,一個用於存放星期一到星期日的字串。接著就是用for迴圈跑至輸入的日期距離1/1總共有多少天,再將之除以七取餘數就能得知該日期是星期幾。

但要特別注意的是,因為2011/01/01並非從星期一開始而是從星期六開始,直接除以七取餘數會有偏差,所以我們需要將日期加4才行。

為什麼是加4?

你可以用Sample來推。

比如01/06算出來 D=6+0=6;6%7 = 6 這對應的是星期日;但01/06是星期四才對,所以需要將D加4。

20200523140533 CPE UVA12019-Doom's Day Algorithm[JAVA]

程式碼

import java.util.*;
public class main{
    public static void main(String[] args) {
       Scanner sc=new Scanner(System.in);
		int cases=sc.nextInt();
		for(int i=0;i<cases;i++){
			int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
			String week[]={"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
			int M=sc.nextInt();
			int D=sc.nextInt();
			D=D+4;
			for(int j=1;j<M;j++){
				D=D+month[j-1];
			}
			System.out.println(week[D%7]);
		}
    }
};
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論