【排队买票】 (C语言代码)超简单的写法 博客(http://blog.csdn.net/soul778888/article/details/79590771)
作者: 杭林生
发表时间:2018-03-17 12:24:07
浏览:1421 | 评论:0
解题思路:
a= 一元排列的方案 ;
b=二元排列的方案;
c=一元和二元一起排列的方案;
解出 答案=a*b*c。
注意事项:
二元的人数必须小于等于一元的人数,否则 无解
即 为0;
二元和一元在一起排列的过程中,必须满足售票员 有零钱。
参考代码:
#include <stdio.h>
#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;
}
新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里