1. 程式人生 > >演算法筆記.胡凡 學習筆記之日期處理

演算法筆記.胡凡 學習筆記之日期處理

 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;
}