#include<stdio.h>
#include<math.h>
int main() {
int begin = 0;
int end = 0;
int num[1000];
int k = 1;
for (int i = 1; i <= 12; i++) {
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
for (int j = 1; j <= 31; j++) {
num[k] = (j % 10) * 10000000 + (j / 10) * 1000000 + (i % 10) * 100000 + (i / 10) * 10000 + (i / 10) * 1000 + (i % 10) * 100 + (j / 10) * 10 + (j % 10) * 1;
k++;
}
}
else if (i == 2) {
for (int j = 1; j <= 28; j++) {
num[k] = (j % 10) * 10000000 + (j / 10) * 1000000 + (i % 10) * 100000 + (i / 10) * 10000 + (i / 10) * 1000 + (i % 10) * 100 + (j / 10) * 10 + (j % 10) * 1;
k++;
}
int ans = (29 % 10) * 1000 + (29 / 10) * 100 + (i % 10) * 10 + (i / 10) * 1;
if ((ans % 4 == 0 && ans % 100 != 0) || ans % 400 == 0) {
num[k] = (29 % 10) * 10000000 + (29 / 10) * 1000000 + (i % 10) * 100000 + (i / 10) * 10000 + (i / 10) * 1000 + (i % 10) * 100 + (29 / 10) * 10 + (29 % 10) * 1;
k++;
}
}
else {
for (int j = 1; j <= 30; j++) {
num[k] = (j % 10) * 10000000 + (j / 10) * 1000000 + (i % 10) * 100000 + (i / 10) * 10000 + (i / 10) * 1000 + (i % 10) * 100 + (j / 10) * 10 + (j % 10) * 1;
k++;
}
}
}
scanf("%d",&begin);
scanf("%d",&end);
int cnt = 0;
for(int i=1;i<k;i++){
if(num[i]>=begin&&num[i]<=end) cnt++;
}
printf("%d",cnt);
return 0;
} 2021/1/18回文日期
想写的小伙伴可以看看呀
要知道如果按普通的方法来判断,从年到日期是最坏的是(0000010-999912301)这个(枚举)复杂度很高;
但是如果只将月份和日期枚举不过几百次循环;再将这个和题目中的数据比对可以得出有几个。😋😋
希望可以喜欢

京公网安备 11010502036488号