91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言排列組合算法怎么實現

小億
102
2023-10-30 11:57:04
欄目: 編程語言

C語言排列組合算法可以通過遞歸實現。下面是一個示例代碼:

#include <stdio.h>

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);
    }
}

void permutation(int arr[], int data[], int start, int end) {
    if (start == end) {
        for (int i = 0; i <= end; i++) {
            printf("%d ", data[i]);
        }
        printf("\n");
        return;
    }
    
    for (int i = start; i <= end; i++) {
        int temp = arr[start];
        arr[start] = arr[i];
        arr[i] = temp;
        
        permutation(arr, data, start + 1, end);
        
        temp = arr[start];
        arr[start] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int arr[] = {1, 2, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    int r = 2;
    int data[r];
    
    printf("Combination:\n");
    combination(arr, data, 0, n - 1, 0, r);
    
    printf("Permutation:\n");
    permutation(arr, data, 0, n - 1);
    
    return 0;
}

在上面的代碼中,combination函數用來計算組合,permutation函數用來計算排列。arr數組存儲原始數據,data數組存儲當前的組合或排列結果。startend參數用來指定當前需要處理的數組范圍,index參數用來指定當前已經選擇了幾個數。r參數用來指定需要選擇多少個數進行組合或排列。

combination函數中,我們使用了回溯法,通過遞歸實現組合算法。在每一層遞歸中,我們從startend的范圍內選擇一個數,并將其保存到data數組中,然后遞歸調用combination函數,繼續選擇下一個數,直到選擇了r個數為止。

permutation函數中,我們使用了回溯法,通過遞歸實現排列算法。在每一層遞歸中,我們將arr[start]arr[i]交換位置,然后遞歸調用permutation函數,繼續處理下一個位置,直到處理完了所有位置為止。

main函數中,我們定義了一個示例數組arr和選擇的個數r,并調用combinationpermutation函數進行計算,并輸出結果。

0
旌德县| 鄂伦春自治旗| 永定县| 神木县| 乌什县| 方山县| 天台县| 新宁县| 田阳县| 马尔康县| 沙湾县| 柯坪县| 蓬溪县| 丰顺县| 许昌县| 灌云县| 滨海县| 武山县| 北碚区| 青阳县| 安塞县| 美姑县| 如东县| 黄龙县| 建宁县| 石屏县| 临城县| 大新县| 满城县| 桐柏县| 丁青县| 木兰县| 泰安市| 丹寨县| 吉木乃县| 化德县| 来安县| 修水县| 潮州市| 宜都市| 岳阳市|