回覆列表
  • 1 # 使用者9364575890814

    典型的組合問題,解法有遞迴、回溯等等

    遞迴法較簡單,程式碼如下:

    void combine(int a[], int n, int m, int b[], int M);

    引數:

    a 存放候選數字

    n 總項數

    m 取出項數

    b 存放選出結果

    M = m

    #include "stdio.h"

    #define MAX 100

    void combine(int a[], int n, int m, int b[], int M);

    int main(void)

    {

    int i;

    int a[MAX], b[MAX];

    for (i = 1; i

    a[i - 1] = i;

    combine(a, 5, 4, b, 4);

    }

    void combine(int a[], int n, int m, int b[], int M)

    {

    int i, j;

    for (i = n; i >= m; i--)

    {

    b[m - 1] = i - 1;

    if (m > 1)

    combine(a, i - 1, m - 1, b, M);

    else

    {

    for (j = M - 1; j >= 0; j--)

    printf("%d ", a[b[j]]);

    printf("\n");

    }

    }

    }

    其他方法可查閱相關資料。

  • 中秋節和大豐收的關聯?
  • 999999:ORA-12899:這個是什麼,該怎麼改?