码迷,mamicode.com
首页 > 其他好文 > 详细

组合问题非递归

时间:2015-01-27 13:08:50      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:

组合问题非递归形式:

例如有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个1
28     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 }
View Code

 

组合问题非递归

标签:

原文地址:http://www.cnblogs.com/GoFly/p/4252335.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!