快排飘过,代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int cmp(const void *m,const void *n){
char *a=(char *)m;
char *b=(char *)n;
char tmpa[20],tmpb[20];
strcpy(tmpa,a);
strcpy(tmpb,b);
strcat(tmpa,b);
strcat(tmpb,a);
return strcmp(tmpa,tmpb);
}
char str[10005][10];
int main(){
int i,j,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",str[i]);
}
qsort(str,n,10*sizeof(char),cmp);
int flag=0;
for(i=0;i<n;i++){
for(j=0;str[i][j]!='\0';j++){
if(flag==0&&str[i][j]=='0');
else {flag=1;printf("%c",str[i][j]);}
}
}
if(flag==0) printf("0");//如果所有段都为零,那么必须输出一个零
printf("\n");
return 0;
}
用Java写了一下,那组万级的测试数据超时,用java做pat真是不公平啊。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int i,n;
List<String> strList=new ArrayList<String>();
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
for(i=0;i<n;i++){
strList.add(sc.next());
}
Collections.sort(strList, new MyComparator());
StringBuilder sb=new StringBuilder();
for(String str:strList){
sb.append(str);
}
i=0;
while(i<sb.length()&&sb.charAt(i)=='0'){
i++;
}
if(i==sb.length()){
System.out.println("0");
}
else{
for(;i<sb.length();i++){
System.out.print(sb.charAt(i));
}
System.out.println();
}
}
}
class MyComparator implements Comparator<Object>{
//返回一个基本类型的整型,返回负数表示o1 小于o2,返回0 表示o1和o2相等,返回正数表示o1大于o2。
public int compare(Object o1, Object o2) {
String s1=(String)o1;
String s2=(String)o2;
return (s1+s2).compareTo(s2+s1);
}
}