重组数位的最大数C语言
时间: 2024-12-04 20:12:35 浏览: 23
C语言数位排序共4页.pdf.zip
在C语言中,如果你有一个数组或者其他类型的数字序列,想要通过重新排列其数位得到一个新的整数,并找到其中的最大值,可以采用一种递归的方法。这里是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数用来交换两个整数的值
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 递归函数,将数组的第一个元素放到最后并返回新数组的首元素
int max_permutation(int arr[], int n, int last) {
// Base case: 如果只有一个元素,就是最大值
if (n == 1)
return arr[0];
// 找到剩余部分的最大值
int max_rest = max_permutation(arr, n - 1, 0);
// 将第一个元素移动到最后,更新最大值
int first = arr[0];
arr[0] = arr[n - 1];
arr[n - 1] = first;
// 返回当前数组的最大值
return (last > 0) ? max_rest : (arr[0] > max_rest) ? arr[0] : max_rest;
}
int main() {
int num, digits;
printf("请输入一个整数,按空格分隔它的各个数位:");
scanf("%d", &num);
// 获取数字的位数
digits = log10(num) + 1;
int arr[digits];
while (digits--) {
arr[digits] = num % 10;
num /= 10;
}
int result = max_permutation(arr, digits, 1); // 第二个参数用于记录是否已将第一个元素放在末尾
printf("重组后的最大数是:%d\n", result);
return 0;
}
```
在这个程序中,我们首先读取用户输入的数并将每一位存储在一个数组中。然后,`max_permutation`函数通过递归地尝试所有可能的排列,每次都把未排序的部分的当前最大值作为基准来比较,直到只剩下单个数位。
阅读全文