亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
友谊县| 青田县| 曲周县| 永德县| 从化市| 佛冈县| 水富县| 太白县| 齐河县| 永德县| 米脂县| 祥云县| 巴彦淖尔市| 始兴县| 双柏县| 包头市| 商河县| 乐业县| 临高县| 濉溪县| 南安市| 中超| 灵丘县| 平山县| 淅川县| 博爱县| 阜阳市| 金寨县| 博野县| 嘉定区| 商水县| 龙江县| 应城市| 乌什县| 稻城县| 西华县| 东乡族自治县| 噶尔县| 彰化县| 喀什市| 儋州市|