原题链接:排队买票
解题思路:
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;
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复