首页 > 代码库 > 组合问题非递归
组合问题非递归
组合问题非递归形式:
例如有5个数,选其中3个数 ,将其模拟成
1 1 1 0 0
1 1 0 1 0
1 1 0 0 1
1 0 1 1 0
1 0 0 1 1
0 1 1 1 0
..........
需要将每次交换后的1结合在一起。
1 #include<cstdio> 2 int b[25]={ 3 0 4 } ; 5 void Print(int len,int r) 6 { 7 int temp=0; 8 for(int i=0;i<len;i++) 9 {10 if(b[i]==1)11 {12 temp++;13 if(temp!=r)14 printf("%d ",i+1);15 else 16 printf("%d\n",i+1);17 }18 19 }20 }21 22 23 int main(int argc, char *argv[])24 {25 int n,r;26 scanf("%d%d",&n,&r); 27 //将b初始化为r个128 for(int i=0;i<r;i++)29 b[i]=1; 30 int i;31 //寻找 1 0 进行移位 32 do{33 Print(n,r);34 for( i=n-1;i>0;i--)35 {36 if(b[i]==0&&b[i-1]==1)37 {38 int right=0;39 for(int j=n-1;j>i;j--)40 {41 if(b[j]==1)42 right++;43 }44 b[i]=1;45 b[i-1]=0;46 //移位 清1 47 for(int j=i+1;j<=i+right;j++)48 {49 b[j]=1; 50 }51 //移位 清0 52 for(int j=i+right+1;j<n;j++)53 {54 b[j]=0;55 }56 break;57 }58 }59 }while(i!=0);60 61 62 63 return 0;64 }
组合问题非递归
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。