找最小
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 0 Accepted Submission(s) : 0
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
给你N(N<=1000)个正整数(在整数范围内)的集合,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
例如输入{32, 321},则输出这两个能排成的最小数字32132。
例如输入{32, 321},则输出这两个能排成的最小数字32132。
Input
输入数据包含多组测试实例,每组测试实例包含两行
第一行有一个数N,表示N个数。
第二行有N个数(用空格隔开)。
注意:N=0,输入结束。
第一行有一个数N,表示N个数。
第二行有N个数(用空格隔开)。
注意:N=0,输入结束。
Output
对于每组输入数据输出一行,能排出的所有数字中最小的一个。
Sample Input
2 32 321 1 123 3 1 2 3 0
Sample Output
32132 123 123#include<stdio.h> #include<stdlib.h> #include<string.h> int comp(const void *p1,const void *p2) { char t1[1001],t2[1001]; strcpy(t1,(char *)p1); strcpy(t2,(char *)p2); return strcmp(strcat(t1,(char *)p2),strcat(t2,(char *)p1)); } int main(){ int n; int i; char str[1001][1001]; while(scanf("%d",&n)&&n){ for(i=0;i<n;i++){ scanf("%s",str[i]); } qsort(str,n,sizeof(str[0]),comp); for(i=0;i<n;i++){ printf("%s",str[i]); } printf("\n"); } }