题目:输入一个1000(不包含1000)以内的正整数,首先将其补齐为三个数字(如果是两位数或者一位数,则前面补0),然后将这三个数字按不同顺序排列成一组数据,输出排列中最大的那个数。
例如:
如果输入249,可以重排出429,249,924,942等等,其中最大的应该是942,因此应输出942;
如果输入的是14,则在前面补0得到014,据此可以重排出041,140,410等等,其中最大的应该是410,因此应输出410。
将输入的1000以内的正整数的三个数字(如果是两位数或者一位数,则前面补0)进行重排,得到最大的数并输出。
测试输入1:5
预期输出1:500
测试输入2:185
预期输出2:851
开始代码如下:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, m;
while(scanf("%d",&n) !=EOF){
if(0<n && n<=9){
m=n*100;
}
else if(10<=n && n<=99){
int p=n%10;
int q=n/10;
if(p>q)
m=p*100+q*10;
else
m=q*100+p*10;
}
else{
int q=n/100;
int w=(n-q*100)/10;
int e=n%10;
if(q>w && w>e)
m=q*100+w*10+e;
else if(q>e && w<e)
m=q*100+e*10+w;
else if(w>q && q>e)
m=w*100+q*10+e;
else if(w>e && q<e)
m=w*100+e*10+q;
else if(e>w && w>q)
m=e*100+w*10+q;
else
m=e*100+q*10+w;
}
cout << m << endl;
}
return 0;
}
老是测试失败,后来发现是:
//输入:977
//输出:797
出了问题,才发现自己忘记了相等的情况,比较过程中加上等号就好了:
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int n, m;
while(scanf("%d",&n) !=EOF){
if(0<n && n<=9){
m=n*100;//一位数一定这样最大
}
else if(10<=n && n<=99){
int p=n%10;
int q=n/10;
if(p>=q)
m=p*100+q*10;
else
m=q*100+p*10;
}//二位数时只需比较一次个位数与十位数
else{
int q=n/100;
int w=(n-q*100)/10;
int e=n%10;
if(q>=w && w>=e)
m=q*100+w*10+e;
else if(q>=e && w<=e)
m=q*100+e*10+w;
else if(w>=q && q>=e)
m=w*100+q*10+e;
else if(w>=e && q<=e)
m=w*100+e*10+q;
else if(e>=w && w>=q)
m=e*100+w*10+q;
else
m=e*100+q*10+w;
}//三位数比较六次,注意是>= 或 <= 而不是 > 或 <
cout << m << endl;
}
return 0;
}