演算法筆記.胡凡 學習筆記之日期處理
阿新 • • 發佈:2018-12-14
Day of Week
今天剛剛下載到演算法筆記課本,之前都是拿演算法筆記上機訓練一直在看。因為上機訓練,日期處理缺失,就想著在CSDN能不能找到,果真有!
找到了日期處理這節,第一道題處理就遇到了難題,不知道閏年,以及月份的處理。看了思路,才恍然大悟!真的覺得太精妙了!(原諒我是一個渣渣)暴力模擬!直接從小數字日期加到大日期,累加看有幾天。差不多看懂了演算法,就找到節後練習打算試試手。題目如上:↑
我的解題思路:
先找出這天離今天有多少天,例如是n
假設今天是星期a,假設給出的日期為星期x
然後根據(n + x)% 1 = a + 1;
列舉x從1-7,找到即為該日期的星期數。
#include <stdio.h> #include <string.h> bool isLeap(int y) { return (y % 4 == 0 && y % 100 != 0) || (y % 400 == 0); } int month[13][2] = {{0,0},{31,31},{28,29},{31,31},{30,30},{31,31},{30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}}; char m[12][20] = {"January","February","March","April","May","June","July","August","September","October","November","December"}; char day[8][20] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}; int main() { int day1, year1, mon1; char s[20]; scanf("%d %s %d", &day1, &s, &year1); int day2 = 8, mon2 = 10, year2 = 2018; int ans = 1; for (int i = 0; i < 12; i++) { if (!strcmp(s, m[i])) { mon1 = i + 1; }else continue; } while(year1 < year2 || mon1 < mon2 || day1 < day2) { day1++; if (day1 == month[mon1][isLeap(year1)] + 1) { mon1++; day1 = 1; } if (mon1 == 13) { year1++; mon1 = 1; } ans++; } int x; for (int i = 1; i <= 7; i++) { int y = (i + ans ) % 7; if ( y == 2) { x = i; } } printf("%s", day[x-1]); return 0; }