题解

难度:简单

知识点:数学逻辑 字符串

方法一

思路:

1.把n个数存放到数组a[55]中,定义变量max存在最终获得的最大数,sum存放每个数a[i]重新排序之后的数。

2.为了得到sum值,首先依次得到a[i]每一位上的数字,此处通过while循环,通过除以10求余数依次得到该数的最低位。将得到的数存放在数组b中,采用sort进行排序,再通过一层循环得到数字sum。

a[0]: 9638
while循环:
图片说明

图片说明

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int n,a[55];
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int max=0;
    for(int i=0;i<n;i++){
        int b[6];
        int j = 0;
        while(a[i]){
            b[j++] = a[i] % 10;
            a[i] /= 10;
        }
        sort(b,b+j);
        int sum=0;
        for(int k=0;k<j;k++){
            sum = sum*10 +b[k];
        }
        if(max<sum) max=sum;
    }
    cout<<max;
    return 0;
}

方法二(字符串)

思路

1.将每一个x[i]用字符串x来保存,对字符串x中的字符进行重新排序。

2.调用C 库函数 int atoi(const char *str) 把参数 str 所指向的字符串转换为一个整数(类型为 int 型),将值与Max进行比较,将较大者赋值给Max。

【注】atoi()函数需要引入都文件#include<stdlib.h>

#include<stdlib.h>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(){
    int n,i,Max=-1;
    for(cin>>n,i=0;i<n;i++){
        string x;
        cin>>x;
        sort(x.begin(),x.end());
        Max=max(Max,atoi(x.c_str()));
    }
    cout<<Max<<endl;
    return 0;
}