#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回文日期

今天ac了道回文日期https://ac.nowcoder.com/acm/problem/16438
想写的小伙伴可以看看呀
要知道如果按普通的方法来判断,从年到日期是最坏的是(0000010-999912301)这个(枚举)复杂度很高;

但是如果只将月份和日期枚举不过几百次循环;再将这个和题目中的数据比对可以得出有几个。😋😋

希望可以喜欢