典型的組合問題,解法有遞迴、回溯等等
遞迴法較簡單,程式碼如下:
void combine(int a[], int n, int m, int b[], int M);
引數:
a 存放候選數字
n 總項數
m 取出項數
b 存放選出結果
M = m
#include "stdio.h"
#define MAX 100
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");
其他方法可查閱相關資料。
典型的組合問題,解法有遞迴、回溯等等
遞迴法較簡單,程式碼如下:
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");
}
}
}
其他方法可查閱相關資料。