蓝桥杯问题,请求指导,不知哪儿错了?

蓝桥杯
问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。  
 输入 一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。然后下面的代码输入n很多是对的,n输入36时是错的,求解,或者有不有更好的方法,敬请赐教!

#include<math.h>
using namespace std;
int main()
{
    int n, i, j,t=0,k=0,u=0;
    int a[10] = { 0 }, b[100] = { 0 }, c[1000] = { 0 };
    cin >> n;
        for (j = 10; j < 100; j++)//先找五位数,左两位和右两位数字一样,所以遍历10到99;
    for (i = 0; i < 10; i++)
        {
            int x1, x2;
            x1 = j % 10;//存个位数
            x2 = j / 10;//存十位数啊
            if (i + 2 * (x1 + x2) == n)
            {
                b[k++] = j;//存五位数的前两位
                a[t++] = i;//存五位数的第三位
            }
        }
    for (i = 100; i < 1000; i++)//左三位和右三位一样,遍历100到1000
    {
        int x3, x4, x5;
        x3 = i % 10;//个位
        x4 = i / 10 % 10;//十位
        x5 = i / 100;//百位
        if ((x3 + x4 + x5) * 2 == n)
            c[u++] = i;//存六位数前三位
    }
    for (i = 0; b[i] && i < 100; i++)
        cout << b[i] << a[i] << b[i]%10 <<b[i]/10<< endl;//将两位数分解倒置
    for (i = 0; c[i] && i < 1000; i++)
        cout << c[i] <<c[i]%10<<c[i]/10%10<<c[i]/100<< endl;
    return 0;
    
}


你用暴力列举阿...
首先轴对称.
那你只要求左边的部分就好啦。撑死3个for循环。

#include <stdio.h>
int main(){
    // 第一位数字 首位不为0
    for(int i =1;i<=9;i++)
        // 第二位数字
        for(int j = 0;j<=9;j++)
            // 第三位数字
            for(int k = 0;k<=9;k++)
            {
                // 如果 i+j+k+i+j
                // 或者 i+j+k+k+j+i
                // 等于你的输入的数字
                // 直接打印。
            }
}

供参考:

#include<iostream>
using namespace std;

int main()
{
    int n, t, k, i, s;
    cin >> n;
    for (i = 10000; i < 1000000; i++) {
        t = i; k = 0; s = 0;
        while (t) {
            s += t % 10;
            k = k * 10 + t % 10;
            t /= 10;
        }
        if (k == i && s == n)
            cout << i << endl;
    }
    return 0;
}

这题可以分解为两个部分:

  1. 判断10000-100000之间的数是否为回文数
  2. 这个回文数的和等于的n
    那么可以定义两个函数来解决
//判断是否为回文数
bool isHws(int num){    //10000-100000中的每一个数
    int sum = 0;
    while(num > 0){
        sum += n % 10;
        num /= 10;
    }
    if(sum == num){
        return true;
    }else{
        return false;
    }
}

int addSum(int num){     //10000-100000中的每一个数
    int sum = 0;
    while(num > 0){
        sum += n % 10;
        num /= 10;
    }
    return sum;
}

只要满足两个条件都符合,那么结果就是你想要的