『蓝桥杯』BASIC-9_特殊回文数

Author Avatar
IDforHYIT 2月 26, 2019

本页面访问量

  • 在其它设备中阅读本文章

题目:

问题描述

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

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

输入格式

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

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

样例输入

52

样例输出

899998
989989
998899

数据规模和约定

  1<=n<=54。

思路:

法一:同上题,求出位数后按需比较。先数后位。

法二:网络解法,先位后数,比较巧妙,效率差不多(CPU使用时间小于法一)。

法三:不解释,节省运算,略优于法二。

代码:

法一:

#include<iostream>
using namespace std;
int main(){
    int a, b, c, d, e, f, g, n;
    cin >> n;
    for(int i=10000; i<100000; ++i){
        //12321
        a = i/10000;
        b = i/1000%10;
        c = i/100%10;
        d = i/10%10;
        e = i%10;
        if(a==e && b==d && (a+b+c+d+e==n)){
            cout << i << endl;
        }
    }
    for(int i=100000; i<1000000; ++i){
        //123321
        a = i/100000;
        b = i/10000%10;
        c = i/1000%10;
        d = i/100%10;
        e = i/10%10;
        f = i%10;
        if(a==f && b==e && c == d && (a+b+c+d+e+f==n)){
            cout << i << endl;
        }
    }
    return 0;
} 

法二:

#include<iostream>
using namespace std;
int main(){
    int a,b,c,d,e,f,t,all;
    scanf("%d",&t);
    for(a=1;a<10;a++)
        for(b=0;b<10;b++)
            for(c=0;c<10;c++)
                for(d=0;d<10;d++)
                    for(e=0;e<10;e++)
                    {
                        if(a==e)
                            if(b==d)
                                {
                                    all=a+b+c+d+e;
                                    if(all==t)
                                    printf("%d\n",a*10000+b*1000+c*100+d*10+e);
                                }
                    }
    for(a=1;a<10;a++)
        for(b=0;b<10;b++)
            for(c=0;c<10;c++)
                for(d=0;d<10;d++)
                    for(e=0;e<10;e++)
                        for(f=0;f<10;f++)
                        {
                            if(a==f)
                                if(b==e)
                                    if(c==d)
                                    {
                                        all=a+b+c+d+e+f;
                                        if(all==t)
                                            printf("%d\n",a*100000+b*10000+c*1000+d*100+e*10+f);
                                    }
                        }


    return 0;
} 

法三:

int main()
{
    int n,a,b,c,t;
    cin>>n;
    for(a=1;a<10;a++)
    for(b=0;b<10;b++)
    for(c=0;c<10;c++)
    {
        t=a*10001+b*1010+c*100;
        if(2*a+2*b+c==n)
            cout<<t<<endl;  
    }
    for(a=1;a<10;a++)
    for(b=0;b<10;b++)
    for(c=0;c<10;c++)
    {
        t=a*100001+b*10010+c*1100;
        if(2*a+2*b+2*c==n)
            cout<<t<<endl;  
    }
    return 0;
}

This blog is under a CC BY-NC-SA 3.0 Unported License
本文链接:https://idforhyit.github.io/2019/02/26/BASIC-9/