快排飘过,代码如下:
#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); } }