[爆卦]n個字元的排列組合是什麼?優點缺點精華區懶人包

為什麼這篇n個字元的排列組合鄉民發文收入到精華區:因為在n個字元的排列組合這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者mantour (朱子)看板C_and_CPP標題Re: [問題] 0與1的排列組合時間Sat ...


我覺得要遞迴的話比較直覺的方法應該是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)
liu2007:遞迴當然是從n個 1-> n-1個1 我說的一個1兩個1是說解決的 09/26 23:57
liu2007:方法,老師說解題要用到排列,不能用0,1,2,3轉二進制 09/26 23:58
dendrobium:他沒有用「0,1,2,3轉二進制」... 09/27 08:07
mantour:我沒用轉2進位喔 我從頭到尾都把它當作字串而不是數字 09/27 15:38
mantour:就 n-1位的字串接0 n-1位的字串的字串接1 09/27 15:39

你可能也想看看

搜尋相關網站