C++組合せ問題

1035 ワード

C(16,3)のような組み合わせを求めて、私たちは公式を通じてこれがどれだけの数があるかを求めることができますが、どのようにこれらの数を表すことができますか?
コード:
 
#include<iostream>

#include<stdio.h>

#define MAXN 100

using namespace std;

int a[MAXN];

int count=0;

void assem(int m,int k)

{

    int i,j;

    for (i=m;i>=k;i--)

    {

        a[k]=i;

        if (k>1)

            assem(i-1,k-1);

        else

        {

             count++;

             /*     

             for (j=a[0];j>0;j--)

             {

                cout<<a[j]<<"  ";

             }

             cout<<endl;*/

        }

    }

}

int main()

{

    int m,r;

    cout<<"m=";

    cin>>m;

    cout<<"r=";

    cin>>r;

    a[0]=r;

    assem(m,r);

    cout<<count<<endl;

    return 0;

}


例えば、C(16,3)には、まず16個の数から1個の数【C(16,1)】を取り、残りの15個の数から1個の数【C(15,1)】を取り、最後に残りの14個の数から1個の数【C(14,1)】を取ると完成するので、このプロセスは再帰的に実現しやすい.