【算法】计算某年某月的最后一天是星期几

2015-03-09 02:16:43 -0500
题目内容:
若已知1800年1月1日为星期3,则对于一个给定的年份和月份,输出这个月的最后一天是星期几。
输入格式:
两行整数,分别代表年份和月份
输出格式:
星期数,0代表星期日
输入样例:
2033
12
输出样例:
6
实现代码如下:
#include <stdio.h>
int getDayFromMouth(int, int);
int panDuanRP(int);

int main(void) {
int year, mouth;
int addDay = 0;
int week = 0;
printf("请输入年份。\n");
scanf("%d", &year);
printf("请输入月份。\n");
scanf("%d", &mouth);
if (year < 1800 || mouth < 1 || mouth > 12) {
printf("输入错误。\n");
return 0;
}
// 按年加
for (int j = 1800; j < year; j++) {
// 润年
if (panDuanRP(j) == 1)
addDay += 366;
// 平年
else
addDay += 365;
}
// 按月加
for (int i = 1; i <=mouth; i++) {
addDay += getDayFromMouth(year, i);
}
week = (addDay % 7) + 2;
if (week > 6)
week %= 7;
// 1800年1月1日为星期3,所以+2
printf("%d年%d月的最后一天是星期%d\n", year, mouth, week);
return 0;
}
/*
*判断平年还是闰年
*@year 年份
*return 1
*闰年
*return 0
*平年
* */
int panDuanRP(int year) {
// 普通润年
if (year % 4 == 0 && year % 100 != 0)
return 1;
// 世纪润年
else if (year % 100 == 0 && year % 400 == 0)
return 1;
// 平年
else
return 0;
}
/*
*获取某年某月有多少天
*@year 年份
*@mouth 月份
* */
int getDayFromMouth(int year, int mouth) {
if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8
|| mouth == 10 || mouth == 12)
return 31;
// 二月
else if (mouth == 2) {
// 闰年
if (panDuanRP(year) == 1)
return 29;
// 平年
else
return 28;
}
// 其他月
else
return 30;
}
算法原创,如果发现错误,欢迎指出。
«Newer      Older»

----Comments(3)----
【飛龍在天】 (@891622172) | @ at 2015-03-09 06:25:
O(∩_∩)O
落叶似秋 (@zyw8) | @ at 2015-03-09 04:25:
@891622172 ……:汗
【飛龍在天】 (@891622172) | @ at 2015-03-09 03:11:
这个有什么用???粗略看标题还以为是女性经期计算。。。。。
Comment:
Name:

Back to home

Subscribe | Register | Login | 中文 | N