2099爱算日期的曾小浪

2099爱算日期的曾小浪

链接: 原题网址.

Description

曾小浪沉浸在魔兽世界这款游戏中无法自拔,可是日子一天天过去曾小浪的作业也快要到了截止日期。

沉浸在游戏中的曾小浪只记得具体截止日期,他现在特别傲娇的想要知道那天是星期几。

希望大家来帮帮他。

Input

输入有多组,每组占一行。

每组有三个整数y,m,d,分别代表年月日

Output

星期几

Samples

input

2016 5 24

output

Tuesday

题解

方法1: 蔡勒公式
链接: 蔡勒公式.

#include<stdio.h>
int main()
{
	char a[8][100] = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" };
	int w,y, m, d;//y代表年份,m代表月份,d代表日期
	while (scanf("%d %d %d", &y, &m, &d) != EOF) {
		if (m < 3) {
			m += 12;
			y--;
		}//蔡勒公式在计算1、2月份时要换算成上一年的13、14月份
		w= (d + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7;//蔡勒公式化简,直接使用公式存在错误。
		printf("%s\n", a[(w+1)%7]);//蔡勒公式计算结果换算成日期
	}
	return 0;
}

方法2:换算成日期差
PS:注意闰年和平年

#include<stdio.h>
char s[8][20] = { "Wednesday","Thursday","Friday","Saturday","Sunday","Monday","Tuesday" };
int main() {
	int y, d, n, m, sum = 0;
	while (scanf("%d %d %d", &y, &m, &d) != EOF) {
		sum = 0;//选取某一天为基准,本代码以2020年1月1日为起点
		if (y > 2020) {
			for (int i = 2020; i < y; i++) {
				if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
					sum += 366;
				}
				else sum += 365;
			}//计算年份差,区分闰年和平年
			for (int i = 1; i < m; i++) {
				if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)sum += 31;
				else if (i == 4 || i == 6 || i == 9 || i == 11)sum += 30;
				else if (i == 2) {
					if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
						sum += 29;
					}
					else sum += 28;
				}
			}//计算月份差,区分每一个月
			sum += d - 1;//计算日期差
		}//计算2020年1月1日以后的日期用加法
		else {
			for (int i = y; i < 2020; i++) {
				if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
					sum -= 366;
				}
				else sum -= 365;
			}//计算到当年的1月1日,所以后面用加法
			for (int i = 1; i < m; i++) {
				if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)sum += 31;
				else if (i == 4 || i == 6 || i == 9 || i == 11)sum += 30;
				else if (i == 2) {
					if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0) {
						sum += 29;
					}
					else sum += 28;
				}
			}
			sum += d - 1;
		}//计算2020年1月1日前用减法
		if (sum >= 0)sum %= 7;
		else sum = sum % 7;
		if (sum < 0)sum += 7;//换算成正的日期差
		printf("%s\n", s[sum]);
	}
	return 0;
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页