文章目录
- 1 题目
- 2 解析
- 2.1 题意
- 2.2 思路
- 3 参考代码
1 题目
不吉利的日期
时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
在国外,每月的 13 号和每周的星期 5 都是不吉利的。特别是当 13 号那天恰好是星期 5时,更不吉利。
现在给你一个年份,请你从小到大依次输出当年所有13 号是星期 5 的月份。
输入描述:
输入包含多组数据,每组数据包含一个正整数year(2000≤year≤9999)。
输出描述:
对应每一组数据,输出所有符合条件的月份,月份之间用空格隔开。
如果当年不存在13号是星期五的月份,就输出一行Luck。
输入例子:
2000
2001
2002
输出例子:
10
4 7
9 12
2 解析
2.1 题意
求满足条件的月份
2.2 思路
计算星期:
使用基姆拉尔森计算公式
Week=(Day + 2Month + 3(Month+1)/5 + Year + Year/4 - Year/100 + Year/400) % 7
0~6:分别代表星期天、一、二、三、四、五、六、起、八
3 参考代码
#include
int main(int argc, char const *argv[]){
int year;
while(scanf("%d", &year) != EOF){
int cnt = 0;
for (int month = 1; month <= 12; ++month) {
int y = year;
int d = 13;
int m = month;
if(m==1||m==2){
y = year - 1;
m+=12;
}
int w =(d+1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
if(w == 5){
if(cnt != 0) printf(" ");
if(m > 12){
printf("%d", m -12);
}else{
printf("%d", m);
}
cnt++;
}
}
if(cnt == 0){
printf("Luck");
}
printf("\n");
}
return 0;
}