C语言实现整数排列生成算法 - 按字典序输出
以下是使用 C 语言解决该问题的代码:
#include <stdio.h>
// 交换数组中两个元素的位置
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
// 递归生成排列
void generatePermutations(int* nums, int left, int right, char* result, int* count) {
// 当左指针等于右指针时,表示已经生成了一个排列
if (left == right) {
// 将排列添加到结果字符串中
for (int i = 0; i <= right; i++) {
result[*count] = nums[i] + '0';
(*count)++;
}
result[*count] = '\0'; // 添加字符串结束符
return;
}
// 生成排列
for (int i = left; i <= right; i++) {
swap(&nums[left], &nums[i]);
generatePermutations(nums, left + 1, right, result, count);
swap(&nums[left], &nums[i]); // 恢复交换前的顺序
}
}
int main() {
int n;
while (scanf("%d", &n) != EOF) {
// 初始化数字数组
int nums[10];
for (int i = 1; i <= n; i++) {
nums[i - 1] = i;
}
// 生成所有排列
int count = 0;
char result[3628800]; // 10的阶乘的字符串表示
generatePermutations(nums, 0, n - 1, result, &count);
// 输出结果
for (int i = 0; i < count; i++) {
printf("%c", result[i]);
if (i % n == n - 1) {
printf("->");
}
}
printf("\n");
}
return 0;
}
希望对你有所帮助!
原文地址: https://www.cveoy.top/t/topic/bASe 著作权归作者所有。请勿转载和采集!