链接: 原题网址.
曾小浪沉浸在魔兽世界这款游戏中无法自拔,可是日子一天天过去曾小浪的作业也快要到了截止日期。
沉浸在游戏中的曾小浪只记得具体截止日期,他现在特别傲娇的想要知道那天是星期几。
希望大家来帮帮他。
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; }