试题 基础练习 特殊回文数

思路

其实这题一开始我的想法就是暴力,枚举一下10000到1000000之间所有的数,但是加上回文判断和和判断,这两判断可以接近10次,所以整个算法复杂度就是10^7左右,可能可以过,我没有试过 这题最好枚举的对象,就是回文串,之间枚举5位数的回文串有哪些,和6位数的回文串有哪些,只要枚举三个位上的数字就行,算法复杂度就是10^3,大大减小了

代码

#include <cstring>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <map>
#include <math.h>
using namespace std;
int main(){
          
   
    int n;
    cin >> n;
    //枚举五位数的情况
    for(int i=1;i<=9;i++){
          
   //第一位
        for(int j=0;j<=9;j++){
          
   //第二位
             for(int k=0;k<=9;k++){
          
   //中间的一位
                 if(i*2+j*2+k==n){
          
   
                     cout << i*10000+j*1000+k*100+j*10+i << "
";
                 }
             }
        }
    }
    //枚举六位数的情况
    for(int i=1;i<=9;i++){
          
   //第一位
        for(int j=0;j<=9;j++){
          
   //第二位
             for(int k=0;k<=9;k++){
          
   //第三位
                 if(i*2+j*2+k*2==n){
          
   
                     cout << i*100000+j*10000+k*1000+k*100+j*10+i << "
";
                 }
             }
        }
    }
}
经验分享 程序员 微信小程序 职场和发展