縮減一下題目的意思,問區間?[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?,于是我們就只能耐心的等待他得出的結果,然后直接輸出。