以下是使用 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;
}

希望对你有所帮助!

C语言实现整数排列生成算法 - 按字典序输出

原文地址: https://www.cveoy.top/t/topic/bASe 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录