B3737 [信息与未来 2018] 双十一
欢迎报名洛谷网校,期待和大家一起进步!
本题考察递推、数学。
一年有
这个也很好办,给出一种不用计算的做法:已知
因此,我们就可以根据
bool leap(int x) {
return (x % 4 == 0 && x % 100 != 0) || (x % 400 == 0);
}
a[1900] = 6;
//为了星期数可以简单地使用模运算,这里规定 a[i] = 0 为星期一,a[i] = 1 为星期二,以此类推,a[i] = 6 为星期日
for (int i = 1901; i <= y; i++) {
if (leap(i)) // 判断是否为闰年
a[i] = (a[i - 1] + 2) % 7;
else
a[i] = (a[i - 1] + 1) % 7;
}
for (int i = x; i <= y; i++) {
if (a[i] == 5 || a[i] == 6) // 判断是否是周末
ans++;
}