解题思路:1.分别求满足条件的五位数和六位数,利用三层循环实现。

               2.最外层从1开始,因为数字第一位不能为0,i,j,p从小到大循环保证最后输出顺序是从小到大的,不需要再次排序。

 for(int i=1;i<10;i++){
        for(int j=0;j<10;j++){
            for(int p=0;p<10;p++){ 
            ...
            }
      }
 }

               3.函数接收temp值,来区分输出五位数还是六位数,再函数调用时,先输出五位数,再输出六位数,保证顺序从小到大.

shu(5);
shu(6);

               4.用sum表示所有位数加起来的值,五位数为

    sum=i*2+j*2+p;

                六位数为

        sum=i*2+j*2+p*2;

                5.对得到的sum进行判断,是否等于n即输入,若等于进行输出,以五位数为例子,如下,res为输出数字

if(temp==5){
                    sum=i*2+j*2+p;
                    if(sum==n){
                    res=i*10000+j*1000+p*100+j*10+i;
                    // 记录符合条件数目,count为0时,输出-1
                        count++;
                        cout<<res<<endl;
                    }
                }

            6.注意题目要求,共两种情况,有则输出对应数,无则输出-1,利用count初值为0来判断是否有满足的数,没有则count为0

if(count==0){
        cout<<-1<<endl;
    }

参考代码:

#include<iostream>
using namespace std;
int n;
int sum=0;
int res=0;
int count=0;
void shu(int temp){
    // 从外向里遍历使得到的数从小到大,第一位不为0,外层循环从1开始
     for(int i=1;i<10;i++){
        for(int j=0;j<10;j++){
            for(int p=0;p<10;p++){  
                if(temp==5){
                    sum=i*2+j*2+p;
                    if(sum==n){
                    res=i*10000+j*1000+p*100+j*10+i;
                    // 记录符合条件数目,cout为0时,输出-1
                        count++;
                        cout<<res<<endl;
                    }
                }
                if(temp==6){
                    sum=i*2+j*2+p*2;
                    if(sum==n){
                        res=i*100000+j*10000+p*1000+p*100+j*10+i;
                        count++;
                        cout<<res<<endl;
                    }
                }
            }
        }
    }
}

int main()
{   
    cin>>n;
    shu(5);
    shu(6);
    if(count==0){
        cout<<-1<<endl;
    }
    return 0;
}


点赞(0)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论