首先是借鉴了前辈的网址奉上:蓝桥杯历届试题-回文数字 (C语言代码)最简洁的解法(对应解法一)

                                                [历届试题]回文数字 (时间复杂度比优质题解的要低)(对应解法二)


解题思路:
        都是用遍历,回文数字的判定和回文数字数位和与输入数字是否相等的判定。

        解法一是将五位数和六位数全遍历一遍;而解法二只遍历五位数或六位数的第一位和第二位,第三位由输入数字n和第一二位的数字决定,降低了时间复杂度。
注意事项:
        没有满足条件的,输出:-1 。其他详见代码注释。

参考代码:

解法一:

#includeint main(){
    int n,i,flag=1;
    scanf("%d",&n);

    for(i=10000;i0)
        {
            num=num*10+t%10;
            sum+=t%10;
            t/=10;
        }//循环结束后num就等于i的倒序数字,如果num和i相等则i是回文数字
        if(num==i&&sum==n)//sum进行数位和的计算
        {
            flag=0;
            printf("%d\n",i);
        }
    }
    if(flag)
        printf("-1");
    return 0;
}//五位数和六位数的全部遍历,对计算机来说也用不了太多时间


解法二:

#includeint main()
{
    int n,flag=1;
    scanf("%d",&n);
    int i,j,k;
    for(i=1;i<=9;i++)
        for(j=0;j=0)&&(k<10))
            {
                flag=0;
                printf("%d%d%d%d%d\n",i,j,k,j,i);
            }
        }
    for(i=1;i<=9;i++)
        for(j=0;j=0)&&(k/2<10))//六位数的时候这里的k实际上最中间的两个数的和,一个数的二倍一定是偶数,所以k一定是偶数。
                {
                flag=0;
                printf("%d%d%d%d%d%d\n",i,j,k/2,k/2,j,i);
            }
        }
        if(flag)
            printf("-1");
    return 0;
}//两重循环第一二位,第三位利用n和一二位求得,先进行五位数的判断,再进行六位数的判断



为什么提交的时候标题太短会刷新啊,害得我重新打了一遍!呜呜呜!!!

点赞(0)
 

0.0分

5 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

一蓑烟雨 2年前 回复TA
为什么我这个总说超时呀,求求大佬帮帮我
一蓑烟雨 2年前 回复TA
#include<stdio.h>
int huiwen(int n)
{
    int x, s = 0;
    x = n;
    while (1)
    {
        s = s * 10 + x % 10;
        x = x / 10;
        if (s == n)
        {
            return 1;
            break;
        }
    }

}

int main()
{
    int sum, i;
    scanf("%d", &sum);
    for (i = 10000; i < 1000000; i++)
    {
        if (huiwen(i) == 1)
        {
            if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum)
                printf("%d", i);
            else if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum)
                printf("%d", i);
            else