输入多个整数组成最大多位整数

来源:互联网 发布:蜂窝数据打不开 编辑:程序博客网 时间:2024/06/06 01:10
/**
 * 输入n,表示要输入的数字个数,接下来输入n个数字,输出这n个数字组成的最大多位整数。
 * step1:当某一位的数字相等时,比较下一位是否相等;step2:当长度较短的那个数字(设为s,其长度为s1)每一位都比较过,
 * 将长度较长的那个数字(设为l)剩下的未比较过的数字与s的第一位开始比起,重复步骤1、2;step3:若s和l的每一位都已经比较过,
 * 还没有出现大小关系,则比较l的后s1位数与s的大小,较小的那个所对应的数字应该放在前面。
 */

import java.util.*;
public class MaxNum {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String res = "";
int n = sc.nextInt();
int[] num = new int[n];
for(int i = 0;i < n;i++){
num[i] = sc.nextInt();
}

for(int i = 0;i < n - 1;i++){
for(int j = i + 1;j < n;j++){
String mStr = "" + num[i],nStr = "" + num[j];


int flag = 1; 
for(int p = 0;p < (mStr.length() > nStr.length() ? mStr.length() : nStr.length());p++){
if(mStr.charAt(p % (mStr.length())) < nStr.charAt(p % (nStr.length()))){
int tmp = num[i];
num[i] = num[j];
num[j] = tmp;
flag = 0;
break;
}else if(mStr.charAt(p % (mStr.length())) > nStr.charAt(p % (nStr.length()))){
flag = 0;break;
}
}

if(flag == 1){
if(mStr.length() > nStr.length()){
String keyValue = "";
for(int p = 0;p < nStr.length();p++){
keyValue += mStr.charAt(mStr.length() - nStr.length() + p);
}
if(Integer.parseInt(keyValue) > Integer.parseInt(nStr)){
int tmp = num[i];
num[i] = num[j];
num[j] = tmp;
flag = 0;
}
}else if(mStr.length() < nStr.length()){
String keyValue = "";
for(int p = 0;p < mStr.length();p++){
keyValue += nStr.charAt(nStr.length() - mStr.length() + p);
}
if(Integer.parseInt(keyValue) < Integer.parseInt(mStr)){
int tmp = num[i];
num[i] = num[j];
num[j] = tmp;
flag = 0;
}
}
}
}
}

for(int i = 0;i < n;i++){
res = res + num[i];
}
System.out.println(res);
}
}

}

          以上只是个人简单的想法,由于能力所限,没有经过优化。

          输入数据4 53 535 5355 53553,输出的应当是5355 535 53553 53的字符串;
          输入数据5 667 6676 66766 667667 67,输出的应当是67 667667 667 6676 66766的字符串。

0 0
原创粉丝点击