作者 主題: 有關排列組合的程式  (閱讀 3109 次)

0 會員 與 1 訪客 正在閱讀本文。

asd33785

  • 可愛的小學生
  • *
  • 文章數: 2
    • 檢視個人資料
有關排列組合的程式
« 於: 2013-08-17 10:47 »
1.請寫出能組合a, b, c, d, e的程式。

2.請寫出能排列a, b, c, d, e的程式。


舉例來說,我把例子縮小,如果要組合abc,其答案如下
a, b, c, ab, ac, bc, abc
如果要排列abc,其答案如下
abc, acb, bac, bca, cab, cba



#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
#define MAX 4
void perm(char *list,int i,int n)
{
int j,temp;
if(i==n)
{
for(j=0;j<n;j++)
printf("%c",list[j]);
printf("\n");
}
else
{
for(j=i;j<n;j++)
{

SWAP(list,list[j],temp);     

perm(list,i+1,n);

}
}
}
int main(void)
{
char list[MAX]={'a','b','c','d'};
perm(list,0,MAX);
system("pause");
return 0;
}


我的程式只能寫到a,b,c,d做排列,請問如果要a,b,c,d,e做排列要如何寫呢?

另外組合的程式想了很久卻想不出來,幫個忙,謝謝!

19行的list是list才對,不知道電腦怎麼無法顯示


« 上次編輯: 2013-08-18 11:15 由 asd33785 »

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
Re: 有關排列組合的程式
« 回覆 #1 於: 2013-08-22 14:54 »
看起來是把 MAX 改成 5,然後修改跟 MAX 相關的那行就好了啊...
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org