33、把数组排成最小的数。假设给定数组{3,32,321},则其排成的最小的数就是321323.
分析:
由于这里给的数组可能很长,如果用一个特定的类型来存放可能会导致溢出,所以采用字符串来处理。定义一种新的比较方式,对数组中的数进行排序,然后从小到大输出即可。
分析:
由于这里给的数组可能很长,如果用一个特定的类型来存放可能会导致溢出,所以采用字符串来处理。定义一种新的比较方式,对数组中的数进行排序,然后从小到大输出即可。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
const int N = 15;
char GlobalStr1[2*N];
char GlobalStr2[2*N];
int compare(const void *a, const void *b)
{
strcpy(GlobalStr1, (char *)a);
strcat(GlobalStr1, (char *)b);
strcpy(GlobalStr2, (char *)b);
strcat(GlobalStr2, (char *)a);
return strcmp(GlobalStr1, GlobalStr2);//a在前小,则a小
}
int main()
{
int n,i;
int arr[N];
char str[N][N];
while(scanf("%d", &n) != EOF)
{
for(i = 0; i < n; ++i)
{
scanf("%d", &arr[i]);
sprintf(str[i], "%d", arr[i]);
}
qsort(str, n, sizeof(char) * N, compare);
for(i = 0; i < n; ++i)
printf("%s", str[i]);
printf("\n");
}
return 0;
}