浙大PAT 1038题 1038. Recover the Smallest Number

快排飘过,代码如下:

#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);
	}	
}


 


 

你可能感兴趣的:(浙大PAT 1038题 1038. Recover the Smallest Number)