Re: [問題] 0與1的排列組合
//我的做法是寫兩個函式
//第一個函式負責把1~n個1的字串送入rec
void a(int n){
int i=0,j=0;
char dat[11]={""};
for(i=1;i<n;i++){
sprintf(dat,"0%s",dat);}
printf("%s\n",dat);
for(i=0;i<n;i++){
for(j=0;j<i+1;j++){ //由於做完rec後dat會變成全0,所以要從最前面填1
dat[j]='1';}
rec(dat,n); }
}
//基本概念是把最右邊的1往右移一格
//當這個1移到底,則把第二個1也往右移一格,並將底部全部的1挪回第二個1的右邊
//直到所有的1都在最右邊,也就是000111之類的形式
void rec(char dat[],int n){
int fg=0,c=0;
int i,j;
printf("%s\n",dat);
if(dat[n-1]!='1'){
for(i=n-1;i>=0;i--){
if(dat[i]=='1'){
dat[i+1]='1';
dat[i]='0';
b(dat,n);
break;}
}
}
//若最底為1,搜到1則c+1並設成0,搜到零則把flag立起
//當再度搜到1時,則將這個1往右移,並依照c在它右邊填1
//當搜到底仍沒有1,則離開遞迴(000111的形式)
else{
for(i=n-1;i>=0;i--){
if(dat[i]=='0'){
fg=1;}
if(dat[i]=='1' && fg==0){
c++;
dat[i]='0';}
if(fg==1 && dat[i]=='1'){
dat[i]='0';
for(j=i+1;j<i+2+c;j++){
dat[j]='1';}
b(dat,n);
break;}
}
}
}
我也跟你一樣要寫同樣的作業
--
我要以耍冷來對抗溫室效應
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.170.85.225
※ 編輯: cooper6334 來自: 118.170.85.225 (09/26 13:54)
推
09/26 13:56, , 1F
09/26 13:56, 1F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 5 篇):
問題
1
4