用C语言设有 n个正整数 a1 a2 ... an,将它们连接成一行,相邻数字首尾相接,组成一个最大的整数。 例如:13、312、343 可以组合成为的最大数为 34331213 。 输入数据共两行,第一行有一个整数,表示数字个数 n。第二行有 n 个整数,表示给出的 n 个整数 a1 到 an
时间: 2024-03-22 21:38:15 浏览: 94
好的,这是一道比较经典的排序题了。我们可以先把这 n 个数字转换成字符串,然后对这些字符串进行排序,排序的依据是将两个字符串拼接起来,比较它们组成的数字大小。具体来说,假设有两个字符串 s1 和 s2,我们将它们拼在一起得到两个数字 x1 和 x2,如果 x1 大于 x2,那么 s1 就排在 s2 前面,否则 s2 排在 s1 前面。
以下是一份 C 语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 1000
#define MAXLEN 10
char nums[MAXN][MAXLEN];
int n;
// 比较函数,将两个字符串拼接起来,比较大小
int cmp(const void *a, const void *b) {
char *s1 = *(char **)a;
char *s2 = *(char **)b;
char str1[MAXLEN * 2], str2[MAXLEN * 2];
strcpy(str1, s1);
strcat(str1, s2);
strcpy(str2, s2);
strcat(str2, s1);
return strcmp(str2, str1);
}
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", nums[i]);
}
// 将字符串数组转换成指针数组
char *p[MAXN];
for (int i = 0; i < n; i++) {
p[i] = nums[i];
}
// 排序
qsort(p, n, sizeof(char *), cmp);
// 输出结果
for (int i = 0; i < n; i++) {
printf("%s", p[i]);
}
printf("\n");
return 0;
}
```
输入样例:
```
3
13 312 343
```
输出样例:
```
34331213
```
阅读全文
相关推荐












