缩减一下题目的意思,问区间 [2022,2022222022] 有多少个数是回文数并且先单调不减,后单调不增。
因为有这两条条件,我们可以得知在判断时只用判断前半段的每个数是不是和对面相应的位置相等,以及是否单调不减。
为什么不用看后半段是否单调不增呢?因为想要符合要求,还得是个回文数,因为是回文数,所以从中间截开,分成前后两段。
如果前半段是单调不减的,那么后半段就是单调不增的,除非这个数不是回文数,那么我们就会判断出,这个数不符合要求。
嗯,可能是这个蒟蒻太蒟蒻了,想不到直接计算的数学的玄学的非常巨的做法,于是我直接从 2022 枚举到 2022222022 。
#include<bits/stdc++.h>
using namespace std;
int a[20];
int main(){int ans=0;for(int i=2022;i<=2022222022;i++){//大力枚举int x=i,cs=0;//查找i有几位while(x>0){a[++cs]=x%10;//记录i的每一位是多少x/=10;}bool cc=0;//判断小 boolfor(int i=1;i<=cs/2;i++){//枚举到一半就行if(a[i]!=a[cs-i+1]||a[i]>a[i+1]){
//如果这数他不回文或者不是按单调不减的顺序排列的cc=1;//废了break;//直接退出}}if(!cc){//如果一切顺利ans++;//数量多一}}cout<<ans;//输出我们的答案return 0;
}
当然啦,这个代码并不会 AC ,会 TLE ,于是我们就只能耐心的等待他得出的结果,然后直接输出。