作者 周文俊
单位 西南石油大学
编程序实现:输入一个年份,求出这一年的1月1日是星期几,要求使用全中文形式(如“星期六”)输出,并限定不能使用循环结构。假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。
输入格式:
输入一个代表年份的正整数。
输出格式:
输出中文星期值,最后换行。
输入样例:
2021
输出样例:
在这里给出相应的输出。例如:
星期五
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main()
{
int year;
scanf("%d", &year);
// 计算 1 月 1 日是星期几,公式为:
// days = (year-1) + (year-1)/4 - (year-1)/100 + (year-1)/400;
// 其中,days 是公元 1 年 1 月 1 日到输入年份的总天数,而加上
// (year-1) 是为了排除掉公元元年的影响,因为公元元年的前一年就是公元前 1 年;
// (year-1)/4 是为了加上所有普通闰年的天数,因为普通闰年是每 4 年一润,
// 而最后一个闰年是公元前 4 年,也就是距离输入年份最近的一个闰年;
// (year-1)/100 是为了减去所有世纪闰年的天数,因为世纪闰年是每 100 年一润,
// 但是在此基础上每 400 年又多一个闰年,所以需要加上 (year-1)/400。
int days = ((year - 1) + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
// 根据余数判断星期几,分别输出中文星期值。
switch (days) {
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
}
return 0;
}
标签:星期,case,闰年,400,year,PTA,115,printf,break
From: https://blog.csdn.net/2301_81508028/article/details/137255518