SDNU 1474.特殊回文数(水题)

Description

  123321是一个非常特殊的数,它从左边读和从右边读是一样的。   

       输入一个正整数n,  编程求所有这样的五位和六位十进制数,满足各位数字之和等于n  。(1< =n< =54)

Input

   输入一行,包含一个正整数n。

Output

  按从小到大的顺序输出满足条件的整数,每个整数占一行。

Sample Input

52

Sample Output

899998
989989
998899
思路:一开始我想的是用暴力来解决,就是6个for循环(从0~9)来计算,时间复杂度也不过是10^6,没想到居然计算不出来,就只能优化成这样的了。
#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define ll long long
const int maxn = 5100;

int n, id, a[58][100][100], num[100], number[100];

int main()
{
    scanf("%d", &n);
    id = 0;
    for(int i = 10000; i<999999; i++)
    {
        int ge = i%10;
        int shi = (i/10)%10;
        int bai = (i/100)%10;
        int qian = (i/1000)%10;
        int wan = (i/10000)%10;
        int shiwan = i/100000;
        if(i <= 100000 && ge+shi+bai+qian+wan == n && ge == wan && shi == qian)
        {
            num[id] = i;
            id++;
        }
        else if(i>100000 && ge+shi+bai+qian+wan+shiwan == n && ge == shiwan && shi == wan && bai == qian)
        {
            num[id] = i;
            id++;
        }
    }
    for(int i = 0; i<id; i++)
        printf("%d
", num[i]);
    return 0;
}
原文地址:https://www.cnblogs.com/RootVount/p/11249090.html