#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)这个(枚举)复杂度很高;
但是如果只将月份和日期枚举不过几百次循环;再将这个和题目中的数据比对可以得出有几个。😋😋
希望可以喜欢