题目链接如下:
pat 1038
此题的重点在于 32,321 3214 在排序时应当是 32 3214 321 的顺序,仔细观察发现只需先循环的填充不足8位的数至八位再排序即可得到正确的序列 如该用例中 321->32132132 3214->32143214 32->32323232 如何排序即一目了然
同时要注意最开始的0是不输出的,并且如果输入的全是0则应当输出一个0
此题仍然对于java来说无法ac,有一组超时,但使用c语言则可以ac
代码如下(有一组超时)
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int flag1=1;
int flag2=1;
ArrayList<A> ar=new ArrayList<A>();
for(int i=0;i<n;i++){
ar.add(new A(sc.next()));
}
Collections.sort(ar);
for(int i=0;i<ar.size();i++){
A a=ar.get(i);
char[] rr=a.s.toCharArray();
for(int j=0;j<rr.length;j++){
if(rr[j]=='0'){
if(flag1==0){
System.out.print(rr[j]);
}
else
continue;
}
else{
System.out.print(rr[j]);
flag1=0;
flag2=0;
}
}
}
if(flag2==1) System.out.println('0');
else System.out.println();
}
}
class A implements Comparable<A>{
String s;
A(String s){
this.s=s;
}
@Override
public int compareTo(A o) {
String m1=s;
String m2=o.s;
int l1=m1.length();
int l2=m2.length();
for(int i=0;i<8-l1;i++)
m1+=s.toCharArray()[i%l1];
for(int i=0;i<8-l2;i++)
m2+=o.s.toCharArray()[i%l2];
return m1.compareTo(m2);
}
}