問題描述
求從1~n的正整數中取出k(k<=n)個不重複整數的所有組合
問題分析
求解k個數的不同組合,我們可以用一維數組a[0]~a[k-1]來保存其中的一個結果,因爲組合元
素是不重複的,可以約定其遞增排列,因爲數組中的元素是遞增排列的:
所以a[k-1]即組合中的最後一個數,只能爲k~n 令i=a[k-1] 則 i>=k && i<=n
設計展示
需要該pdf文檔,直接下載就行
運行代碼
#include <stdio.h>
#define MAXK 10
//author:rgh
//問題表示
int n,k;
int a[MAXK];
//存放一個組合
void dispacomb( )
//輸出一個組合
{
for (int i=0;i<k;i++)
printf("%3d",a[i]);
printf("\n");
}
void comb(int n, int k)
//求1~n中k個整數的組合
{ if(k==0)
//k爲0時輸出一個組合
dispacomb();
else
{for (int i=k;i<=n;i++)
{a[k-1]=i;
//a[k-1]的位置取k~n的整數
comb(i- 1,k-1);//a[k-1]組合a[O..i-1]中的k -1個整數產生一個組合
}}}
int main()
{
printf("請分別輸入n和k的值:" ,n,k);
scanf("%d %d",&n,&k);//輸入一組n和k的值
printf("1~%d中%d個整數的所有組合:\n" ,n,k);
comb(n,k);
}