Re: [問題] 0與1的排列組合

看板C_and_CPP作者 (朱子)時間14年前 (2009/09/26 16:51), 編輯推噓2(203)
留言5則, 3人參與, 最新討論串5/5 (看更多)
我覺得要遞迴的話比較直覺的方法應該是n個位元 -> n-1個位元 這樣遞回下去 而不是原PO說的一個1二個1三個1 下面是簡單的實作 不過用char的陣列來存感覺有點浪費空間就是了 http://nopaste.info/df51251f5f.html #include<stdio.h> #include<stdlib.h> int print_combination(char *s,int i,int n) { char *tmp; if(i==1) { printf("%s0\n",s); printf("%s1\n",s); } else { tmp=(char *) calloc(n-i+2,sizeof(char)); sprintf(tmp,"%s0",s); print_combination(tmp,i-1,n); sprintf(tmp,"%s1",s); print_combination(tmp,i-1,n); } free(tmp); } int main() { int n; char c='\0'; printf("enter n:"); scanf("%d",&n); print_combination(&c,n,n); return 0; } ※ 引述《bleed1979 (十三)》之銘言: : ※ 引述《liu2007 (薯)》之銘言: : : 好煩呀 : : 這個是一個作業 : : 題目就是:輸入一個數字n(正整數) : :  請排列出n個位元的0101的排列組合 : :  不可使用 0,1,2,3,4,5,6.....的方式累加轉二進制補零的方式 : :  也不可以使用任何除2進位之類有的沒有的方法 : :  只能:0個1的排列、1個1的排列、2個1的排列.....n個1的排列 : : 印象中老師說可以用遞迴寫..... : : 可是我不知道要怎麼樣往終止條件靠近..... : : 有想法但是程式碼就是想不出來.... : : 不知道有沒有鄉民可以幫我一把..... : : 希望我的說明大家可以看的董 : 終止條件不就是全1?或是算個數 : 如果你真的那麼想要遞迴的話... : 提供byte level很爛的解法 : 你可以Q的更好 : #include <stdio.h> : void cal(char *a,int b,int s,int i,int e,int *c) : { : if (i==e) : { : a[i]=48; : printf("%s %d\n",a,(*c)++); : a[i]=49; : printf("%s %d\n",a,(*c)++); : if(s>b && ((*c)>>(e-s+1))&1==1) : { : a[s--]=48; : a[s]=49; : cal(a,b,s,s+1,e,c); : a[s]=48; : } : } : else : { : a[i]=48; : cal(a,b,s,i+1,e,c); : a[i]=49; : cal(a,b,s,i+1,e,c); : a[i]=48; : } : } : int main() : { : int c; : char a[11],*p; : for (p=a+10;p>=a;p--) : *p=48; : c=a[10]=0; : cal(a,6,9,9,9,&c); : return(0); : } : a是輸出字串 : b是由右往左數bit (10-b) 這意味著如果你可以顯示(10-b)位數 : s是最左邊的1,左邊界 : i是切換0與1並向右往e的方向作遞迴 : e是右邊界 : c是計算此二進位的值 : PS.改一改code就可以輸出32 bit, 爛!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.213.158 ※ 編輯: mantour 來自: 140.112.213.158 (09/26 17:04) ※ 編輯: mantour 來自: 140.112.213.158 (09/26 17:05) ※ 編輯: mantour 來自: 140.112.213.158 (09/26 17:19)

09/26 23:57, , 1F
遞迴當然是從n個 1-> n-1個1 我說的一個1兩個1是說解決的
09/26 23:57, 1F

09/26 23:58, , 2F
方法,老師說解題要用到排列,不能用0,1,2,3轉二進制
09/26 23:58, 2F

09/27 08:07, , 3F
他沒有用「0,1,2,3轉二進制」...
09/27 08:07, 3F

09/27 15:38, , 4F
我沒用轉2進位喔 我從頭到尾都把它當作字串而不是數字
09/27 15:38, 4F

09/27 15:39, , 5F
就 n-1位的字串接0 n-1位的字串的字串接1
09/27 15:39, 5F
文章代碼(AID): #1AlTONgO (C_and_CPP)
文章代碼(AID): #1AlTONgO (C_and_CPP)