NYOJ 32 组合数

地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=32

 1 #include<stdio.h>
 2 #include<string.h>
 3 int n,m;
 4 int ok[15];//
 5 int num[15];//存放
 6 int ac[15];//标记
 7 void f(int l)
 8 {
 9     int a,b;
10     if(l==m)
11     {
12         for(a=0;a<m;a++)
13             printf("%d",num[a]);
14         printf("\n");
15         
16     }
17     else
18     {
19         if(l==0)
20         {
21                 for(b=n-1;b>=m-1;b--)
22                 {
23                    if(ac[b]>0)
24                    {
25                       num[l]=ok[b];
26                       ac[b]--;
27                       f(l+1);
28                       ac[b]++;
29                 
30                    }
31                 }
32         }
33         else
34         {
35           for(b=n-1;b>=0;b--)
36           {
37              if(ac[b]>0)
38              {
39                 if(l>=1&&ok[b]<num[l-1])
40                 {
41                   num[l]=ok[b];
42                   ac[b]--;
43                   f(l+1);
44                   ac[b]++;
45                 }
46                  
47              }
48           }
49         }
50     }
51 }
52 int main()
53 {
54     int a,b,k;
55     for(a=0;a<10;a++)
56         ok[a]=a+1;
57     
58     while(scanf("%d%d",&n,&m)!=EOF)
59     {
60         
61         for(a=0;a<=n;a++)
62             ac[a]=1;
63         memset(num,0,sizeof(num));
64         f(0);
65     }
66 }                

posted on 2012-08-13 11:43  mycapple  阅读(250)  评论(0编辑  收藏  举报

导航