给个简单的思路:
1.把要重组的n个数字 放入vector 中,最好以string 存储,
2.比较每个数的第一个"字符",
3.重组.
建议使用二维数组比较方便!行用于存一串字符,每列存一个字符.比较时用快排,或基数排,当然冒泡也行!
don't know why my code cannot pass the online judge at the website
/*---------------------------------------------------------------------------
File name: 最大的多位整数.c
Author: HJin (email: fish_sea_bird [at] yahoo [dot] com )
Created on: 10/15/2007 09:39:25
Environment: WinXPSP2 En Pro + VS2005 v8.0.50727.762
Problem statement:
---------------------------------------------------------------------------
http://mail.bashu.cn:8080/JudgeOnline/showproblem?problem_id=1276
【1998年提高组2】最大的多位整数
Time Limit:1000MS Memory Limit:65536K
Total Submit:88 Accepted:46
Description
设有n个正整数,将他们连接成一排,组成一个最大的多位整数.
例如:n=3时,3个整数13,312,343,连成的最大整数为:34331213
又如:n=4时,4个整数7,13,4,246连接成的最大整数为7424613
Input
程序输入:N
N个数
Output
程序输出:连接成的多位数
Sample Input
3
13 312 343
4
1 2 3 4
4
7 13 4 246
3
9 98 987
3
9 8 0
2
0000000000001 002
Sample Output
34331213
Source
xinyue
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100000
char s[N];
char a[10000][N];
int cmp(const void* a, const void* b)
{
char *sa = (char*)a, *sb = (char*)b;
int na =strlen(sa), nb = strlen(b), i, n;
n = na<nb ? na : nb;
for(i=0; i<n; ++i)
{
if(sa[i]<sb[i])
{
return 1;
}
if(sa[i]>sb[i])
{
return -1;
}
}
return na-nb;
}
int main()
{
int n, i, j;
while(scanf("%d", &n)!=EOF)
{
getchar();
for(i=0; i<n; ++i)
{
scanf("%s", s);
j=0;
while(s[j]=='0')
++j;
strcpy(a[i], s+j);
}
qsort(a, n, N, cmp);
for(i=0; i<n; ++i)
printf("%s", a[i]);
printf("\n");
}
return 0;
}