解题思路: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分
2 人评分
C语言训练-素数问题 (C语言代码)浏览:1065 |
A+B for Input-Output Practice (IV) (C语言代码)浏览:484 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:934 |
C二级辅导-阶乘数列 (C语言代码)浏览:583 |
前10名 (C语言代码)浏览:773 |
淘淘的名单 (C语言代码)浏览:1309 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:820 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:604 |
孤独的骑士 (C语言代码)浏览:1416 |