C语言编写K 位 N 进制从小到大的全排列,每行一个数值, K 的范围 [2,10] N 的范围[2,9]; 输入第一行为K,第二行为 N,
时间: 2024-12-12 21:32:20 浏览: 2
在C语言中,为了生成指定长度`K`、基数`N`(2到9之间)的全排列并按从小到大排序,你可以使用递归和数组来实现。这里是一个简单的示例程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 9
void permute(int arr[], int start, int end, int k, int n) {
if (start == k) {
for (int i = 0; i < k; i++) {
printf("%d", arr[i]);
if (i != k - 1)
printf("%d", n); // 补充进制数字n
}
printf("\n");
return;
}
for (int i = start; i <= end; i++) {
swap(arr[start], arr[i]); // 交换当前元素
permute(arr, start + 1, end, k, n); // 递归处理剩余位置
swap(arr[start], arr[i]); // 恢复原始顺序,回溯
}
}
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int k, n;
scanf("%d %d", &k, &n);
if (k > MAX_N || n < 2 || n > MAX_N) {
printf("Invalid input! K and N should be within the range [2, %d].\n", MAX_N);
return 1;
}
int arr[k];
for (int i = 0; i < k; i++)
arr[i] = 0;
permute(arr, 0, n - 1, k, n);
return 0;
}
```
这个程序首先检查输入是否合法,然后通过递归函数`permute`生成所有可能的排列,并打印出来。注意,由于题目要求每行一个数值,所以在输出排列后,会额外添加一次进制数`n`。
阅读全文