重排最大数

题目:输入一个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;
}

猜你喜欢

转载自blog.csdn.net/interestingddd/article/details/113841687