0
点赞
收藏
分享

微信扫一扫

不吉利的日期————基姆拉尔森计算公式

m逆光生长 2022-05-26 阅读 11


文章目录

  • ​​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;
}

举报

相关推荐

0 条评论