The girl Taylor has a beautiful calendar for the year y. In the calendar all days are given with their days of week: Monday, Tuesday, Wednesday, Thursday, Friday, Saturday and Sunday.
The calendar is so beautiful that she wants to know what is the next year after y when the calendar will be exactly the same. Help Taylor to find that year.
Note that leap years has 366 days. The year is leap if it is divisible by 400 or it is divisible by 4, but not by 100(https://en.wikipedia.org/wiki/Leap_year).
The only line contains integer y (1000 ≤ y < 100'000) — the year of the calendar.
Print the only integer y' — the next year after y when the calendar will be the same. Note that you should find the first year after y with the same calendar.
2016
2044
2000
2028
50501
50507
平年(365 % 7 == 1)闰年(366 % 7 == 2),所以满足条件的下个年份就是能被7整除且跟今年是相同的闰年或平年。
AC代码:
#include<cstdio>
int is_ren(int n){
if(n%400 == 0 || (n%100 != 0 && n%4 == 0)) return 1;
return 0;
}
int main(){
int n, sum = 0, flag = 1;
scanf("%d", &n);
if(is_ren(n)){
flag = 0;
}
for(int i = n + 1; i < n + 50; i++){
if(is_ren(i)){
sum = (sum + 366) % 7;
}
else{
sum = (sum + 365) % 7;
}
if(sum == 0 && is_ren(i) == is_ren(n)){
printf("%d", i);
break;
}
}
return 0;
}
本文介绍了一个算法问题,即如何找到与当前年份拥有相同日历布局的下一个年份。通过判断平年与闰年,并计算每年结束时相对于星期的偏移量,最终确定目标年份。
855

被折叠的 条评论
为什么被折叠?



