题解:P2010 [NOIP2016 普及组] 回文日期
思路
考虑枚举和构造,然后判断是否可行,可行就方案数加一。
只需要算出后面四位就好了,然后再算前面用于判断是否超出边界。
然而你会考虑到闰年的特殊性。
但是我们发现,$2$ 月 $29$ 日反过来是 $9220$ 年,这是闰年。
代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int n, m, tmp, sum, ans, a[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; // 下标从 1 开始,因此 a[0] 存为 0,存为其他数字均可
int main()
{
cin >> n >> m;
for (int i = 1; i <= 12; i++) // 枚举 12 个月
{
for (int j = 1; j <= a[i]; j++) // 枚举每个月的日期
{
tmp = (j % 10) * 1000 + (j / 10) * 100 + (i % 10) * 10 + (i / 10); // 算出月和日
sum = tmp * 10000 + i * 100 + j; // 算出整个日期
if (sum < n || sum > m) // 判断是否超出日期边界
continue;
ans++; // 答案加一个
}
}
cout << ans << endl;
return 0;
}