引入题目
题目描述
设有nnn个正整数(n≤20)(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3时,3个整数13,312,343联接成的最大整数为:343312133
又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
输入格式
第一行,一个正整数n。
第二行,n个正整数。
输出格式
一个正整数,表示最大的整数
------------------------------------------------------------解题思路----------------------------------------------------------
题目中要将给出的数字拼接在一起要得到最大的一个数,我们可以想到string中,str1=“12”;str2=“34”;则str1+str2=“1234”,所以我们可以直接将两个值进行string相加再比较是那种相加得到的值最大,依次将得到的最大的数放到最前面,循环到最后一个,即可以得到结果。在问题中有一个问题,java中的string不能像c++那样直接字符串相加减就可以得到结果进行比较,还需要将String转化成int进行比较,所以有以下两种方法
1:int x=Integer.parseInt(str1);使用Integer类中的parseInt()方法;
2:int y=Integer.valueOf(str2).intValue();使用Integer类中的valueOf()方法的intValue()方法;
----------------------------------------------代码---------------------------------------------------------------
package 洛谷;
import java.util.Scanner;
/*题目描述
设有nnn个正整数(n≤20)(n≤20)(n≤20),将它们联接成一排,组成一个最大的多位整数。
例如:n=3n=3n=3时,333个整数131313,312312312,343343343联接成的最大整数为:343312133433121334331213
又如:n=4n=4n=4时,444个整数777,131313,444,246246246联接成的最大整数为:742461374246137424613*/
public class P1012之前标号错了 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
String a[]=new String[n];
for(int i=0;i<n;i++) {
a[i]=sc.next();
}
for(int i=0;i<n;i++) {
for(int j=i+1;j<n;j++) {
int x=Integer.parseInt(a[i]+a[j]);
int y=Integer.parseInt(a[j]+a[i]);
if(x-y<0) {
String temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<n;i++) {
System.out.print(a[i]);
}
System.out.println();
}
}
}
----------------------------------------------------完结------------------------------------------------