题目描述:
设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。
 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213
 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613
思路:
 一开始直接用strcmp函数冒泡比较两个字符串的大小,但是忽略了当两个字符串分别是n和n+1的时候,前n个字符都一样,而最后一个n+1的字符比较小,这是strcmp函数会把长度为n+1的字符串放在前面,这就导致了错误,最后一个测试点WA。可以在每次比较前用一个中间的字符数组来把两个字符串拼接起来,然后在比较两种拼接方式后得到的新字符串的大小就好了。
代码:
using namespace std;
char str[25][100], t[100];
char t1[100], t2[100];
int main()
{
  int n, i, j;
  scanf("%d", &n);
  for (i=1; i<=n; i++){
    scanf("%s", str[i]);
  }
  for (i=1; i<=n-1; i++){
    for (j=1; j<=n-i; j++){
      strcpy(t1, str[j]);
      strcat(t1, str[j+1]);
      strcpy(t2, str[j+1]);
      strcat(t2, str[j]);
      if (strcmp(t1, t2)<0){
        strcpy(t, str[j+1]);
        strcpy(str[j+1], str[j]);
        strcpy(str[j], t);
      }
    }
  }
//  for (i=1; i<=n; i++){
//    printf("%s\n", str[i]);
//  }
  for (i=1; i<=n; i++){
    printf("%s", str[i]);
  }
  return 0;
}                
                









