排队买票问题(http://www.dotcpp.com/oj/problem1163.html)

#include
#define N 10
int main()
{
    int z,x,y,i,j,o;
    int pl(int x);
    while(scanf("%d%d%d",&z,&x,&y)!=EOF)
{
    int v[20][20]={0};
    if(y>x)
    {
        printf("0\n");        //如果2元的小孩人数大于1元小孩的人数,就没有满足题意的排队方案 即为0。
    }
    else
 {
    v[1][0]=1;           //求1元小孩和2元小孩一起排列的方案。
    v[1][1]=1;
    for(i=2;i<=x;i++)
    {
        for(j=0;j<=i;j++)
        {
            for(o=0;o<=j;o++)
            {
                v[i][j]=v[i][j]+v[i-1][o];
            }
        }
    }
    printf("%d\n",v[x][y]*pl(x)*pl(y));      //求出满足题意的方案  即一起排列*单独排列
 }
}
    return 0;
}
int pl(int x)             //分别求出1元小孩一起排列的方案和二元小孩一起排列的方案
{
   int i,e=1;
   for(i=1;i<=x;i++)
   {
       e=e*i;
   }
   return e;
}

你可能感兴趣的:(排队买票问题(http://www.dotcpp.com/oj/problem1163.html))