遞歸求解-算法設計與分析報告C/C++版

問題描述 

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章