c语言怎么实现排列组合算法

avatar
作者
筋斗云
阅读量:0

C语言实现排列组合算法可以使用递归或迭代的方式来实现。以下是使用递归实现排列组合算法的示例代码:

#include <stdio.h>  // 计算阶乘 int factorial(int n) {     if (n <= 1) {         return 1;     } else {         return n * factorial(n - 1);     } }  // 排列 void permutation(int arr[], int start, int end) {     if (start == end) {         for (int i = 0; i <= end; i++) {             printf("%d ", arr[i]);         }         printf("\n");     } else {         for (int i = start; i <= end; i++) {             // 交换arr[start]和arr[i]             int temp = arr[start];             arr[start] = arr[i];             arr[i] = temp;              permutation(arr, start + 1, end);              // 恢复arr[start]和arr[i]的交换             temp = arr[start];             arr[start] = arr[i];             arr[i] = temp;         }     } }  // 组合 void combination(int arr[], int data[], int start, int end, int index, int r) {     if (index == r) {         for (int i = 0; i < r; i++) {             printf("%d ", data[i]);         }         printf("\n");         return;     }      for (int i = start; i <= end && end - i + 1 >= r - index; i++) {         data[index] = arr[i];         combination(arr, data, i + 1, end, index + 1, r);     } }  int main() {     int arr[] = {1, 2, 3};     int n = sizeof(arr) / sizeof(arr[0]);      // 排列     printf("Permutations:\n");     permutation(arr, 0, n - 1);      // 组合     printf("\nCombinations:\n");     for (int r = 1; r <= n; r++) {         int data[r];         combination(arr, data, 0, n - 1, 0, r);     }      return 0; } 

以上代码中,permutation函数使用递归实现排列算法,combination函数使用递归实现组合算法。可以根据需要传入不同的起始位置和结束位置来计算不同长度的排列组合。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!