C语言,有一些非负整数序列,把所有数字拼接起来排成一个数(可能很长)。输出能拼接出的所有数字中最小的那一个。 【输入形式】 输入一些非负整数,以-1结束。 【输出形式】 输出拼接后的最小的整数
时间: 2024-03-13 12:47:59 浏览: 86
这是一个经典的问题,可以使用排序算法来解决。我们可以将所有的数字转化为字符串,然后通过比较两个字符串的大小来确定它们在拼接后的顺序。
以下是使用选择排序算法的 C 语言实现:
```c
#include <stdio.h>
#include <string.h>
void swap(char *a, char *b) {
char temp = *a;
*a = *b;
*b = temp;
}
void selection_sort(char str[][11], int len) {
int i, j, min;
for (i = 0; i < len - 1; i++) {
min = i;
for (j = i + 1; j < len; j++) {
if (strcmp(str[j], str[min]) < 0) {
min = j;
}
}
if (min != i) {
swap(str[i], str[min]);
}
}
}
int main() {
int num[1000], i, j;
char str[1000][11];
for (i = 0; ; i++) {
scanf("%d", &num[i]);
if (num[i] == -1) {
break;
}
sprintf(str[i], "%d", num[i]);
}
int len = i;
selection_sort(str, len);
for (i = 0; i < len; i++) {
printf("%s", str[i]);
}
printf("\n");
return 0;
}
```
首先,我们定义一个整型数组 num,用于存储输入的非负整数。然后,我们使用 sprintf 函数将每个数字转化为字符串,并存储在一个字符串数组 str 中。接着,我们使用选择排序算法对字符串数组 str 进行排序。最后,我们遍历排序后的字符串数组,将每个字符串拼接起来,输出结果。
需要注意的是,我们定义的字符串数组 str 的长度为 11,这是因为一个整数最多只有 10 位,再加上一个终止符号,所以字符串的长度需要为 11。
阅读全文