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 }                

你可能感兴趣的:(组合)