藍橋杯 ADV-127 演算法提高 日期計算(java)
阿新 • • 發佈:2019-01-24
演算法提高 日期計算
時間限制:1.0s 記憶體限制:256.0MB
問題描述
已知2011年11月11日是星期五,問YYYY年MM月DD日是星期幾?注意考慮閏年的情況。尤其是逢百年不閏,逢400年閏的情況。
輸入格式
輸入只有一行
YYYY MM DD 輸出格式 輸出只有一行
W 資料規模和約定 1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且確保測試樣例中YYYY年MM月DD日是一個合理日期
1 <= W <= 7,分別代表週一到週日 樣例輸入 2011 11 11 樣例輸出 5 注意幾點吧:
http://blog.csdn.net/qq_25605637/article/details/54897110
YYYY MM DD 輸出格式 輸出只有一行
W 資料規模和約定 1599 <= YYYY <= 2999
1 <= MM <= 12
1 <= DD <= 31,且確保測試樣例中YYYY年MM月DD日是一個合理日期
1 <= W <= 7,分別代表週一到週日 樣例輸入 2011 11 11 樣例輸出 5 注意幾點吧:
int sum = (sum2 - sum1 + 12) % 7;
其實這行程式碼,邏輯上來講+5和+12也可以的,但是如果+5時,此時11-11=0+5%7=2,而不是等於。。(自己想一下吧)這就錯了。
for(int i=1599; i<year; i++) {
而且這行程式碼也要注意一下,如果時i<=year,那就算了year的整整一年的天數,這就錯了喔。。
思路:
算出2011年11月11日到1599年1月1日的天數,再算出要求的日期到1599年1月1日的天數,2個作差對7取餘即可求出星期幾
程式碼如下:
import java.util.Scanner; public class Main { static int[] mon = {0,31,28,31,30,31,30,31,31,30,31,30,31}; public static void main(String[] args) { Scanner in = new Scanner(System.in); int year = in.nextInt(); int month = in.nextInt(); int day = in.nextInt(); int sum1 = cal(2011,11,11); int sum2 = cal(year,month,day); System.out.println(sum1+" "+sum2); System.out.println(sum1); if(sum1 <= sum2) { //+5和+12也可以,+12的原因是當sum2為11!! int sum = (sum2 - sum1 + 12) % 7; if(sum == 0) sum = 7; System.out.println(sum); } else { int sum = (sum1 - sum2) % 7; if(sum == 0) System.out.println(5); else if(sum == 1) System.out.println(4); else if(sum == 2) System.out.println(3); else if(sum == 3) System.out.println(2); else if(sum == 4) System.out.println(1); else if(sum == 5) System.out.println(7); else if(sum == 6) System.out.println(6); } } public static int cal(int year,int month,int day) { int sum = 0; //注意這裡是i<year,如果是i<=year,就把year也計算在內! for(int i=1599; i<year; i++) { if((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) { sum += 366; } else { sum += 365; } } //注意這裡是i<month for(int i=1; i<month; i++) { //是閏年的第二月,天數是29天 if(((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) && i == 2) sum += mon[i] + 1; else sum += mon[i]; } sum += day; return sum; } }
http://blog.csdn.net/qq_25605637/article/details/54897110