解题思路:题目说是5位或6位,所以为了提高效率,不需要从10001-999999进行循坏,只需要从100-999即可。分别判断5位数和6位数的情况,,那么就要自定义两个函数来分别判断。

注意事项:1.注意不存在的情况!!!

              2.输出是从小到大的!!!

              3. 在自定义函数中,变量x的值通过取位后是会变化的,所以要定义一个新的变量x1来保存变量x的值。


参考代码:

# include<stdio.h>
long hws1(int n,long x)  //判断5位数的情况
{
    long hw,x1;
    int g,s,b,q,w;
    x1=x;
    b=x%10;x=x/10;
    q=x%10;x=x/10;s=q;
    w=x%10;x=x/10;g=w;
    if((g+s+b+q+w)==n){
        hw=x1*100+s*10+g;//注意不能直接hw=x*100+s*10+g  x通过取位后已经发生了变化。
        return hw;
    }
    else return x1;
}
long hws2(int n,long x)  //判断6位数的情况
{   
    long hw,x1;
    int g,s,b,q,w,sw;
    x1=x;
    q=x%10;x=x/10;b=q;
    w=x%10;x=x/10;s=w;
    sw=x%10;x=x/10;g=sw;
        if((g+s+b+q+w+sw)==n){
        hw=x1*1000+b*100+s*10+g;
        return hw;
    }
    else return x1;
}
int main()
{
    int n,gs=0;
    long i;
    scanf("%d",&n);
    for(i=100;i<=999;i++){
        if(i!=hws1(n,i)) {
            printf("%ld\n",hws1(n,i));
            gs=gs+1;
        }
    }
    for(i=100;i<=999;i++){
        if(i!=hws2(n,i)){
            printf("%ld\n",hws2(n,i));
            gs=gs+1;
        }
    }
    if(gs==0)
    printf("-1\n");   //不存在情况
    return 0;
}


点赞(0)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

小姜骑猪 2年前 回复TA
#include<stdio.h>
#include<string>

int flag=0;

int huiwen(int a[], int sum, int n)
{
    if (sum == n)
    {
        if (a[0] != 0)
        {
            for (int j = 0; j < 3; j++)
            {
                if (a[j] != a[6 - j - 1])
                    return 0;
            }
            flag = 1;
            return 1;
        }
        else
        {
            for (int j = 1; j < 3; j++)
            {
                if (a[j] != a[6 - j])
                    return 0;
            }
            flag = 1;
            return 1;
        }

    }
    else
        return 0;
}


int main()