scau 电影《长津湖》

描述

2021年国庆大卖电影《长津湖》以长津湖战役为背景,讲述了一个志愿军连队在极度严酷环境下坚守阵地奋勇杀敌,为长津湖战役胜利作出重要贡献的感人故事。
一天,光明村也上影《长津湖》了,大家都去电影院买票。假设票价是50元整,去买票的人都是现金支付,且每人要么只带一张50元大钞,
要么只带一张100元大钞。小村里的电影院只有一个买票窗口,并且开始卖票时,没有准备任何找零的钱(这意味着先收一张50元大钞,才能给下一位
持100元大钞的买主找零)。
在电影票开卖前,村民都自觉的排成一列,问,现在有n位手持50元大钞的村民和m位手持100元大钞的村民,问有多少种不同的排队方式,、
使得在整个卖票过程中,电影院不会出现无钱找零的情况。
注:只要有任意两个人的先后顺序不同,整个队列就是不同的排队方式

输入格式

两个正整数,以空格分隔,分别是n和m(0

输出格式

不同的排队方式,如果无任何一种成立的排队方式,则输出0

输入样例

2 2

输出样例

8

提示

使用递归方法求解

思路

该题运用递归的方法进行求解,首先我们先分析一下题目。50元的n人,100元的m人,任意两个人顺序不一样,都会造成队伍的不一样。为了方便计算,我们可以先假设拿到同样面额的人交换位置队伍是不变的。

那么有以下几种情况:

1、当n<m时,即拿到50元的人数少于100元,那么任何一种排队方式都不成立。

2、当m=0时,即拿到100元的人数为0,那么任何一种排队方式都可以,这里sum=1

3、其他情况下,当第m+n个人拿的是100元时,那么前面n+m-1中,n个拿50,m-1个拿100。当第m+n个人拿的是50时,那么前面n+m-1中,n-1个拿50,m个拿100。

由此我们可以通过递归实现。

在最后我们在分别对拿50元和拿100元进行排序。


#include<stdio.h>
//i*(i-1)*....
int st(int m)
{
    int i;
    int sum=1;
    for(i=1;i<=m;i++)
        sum=sum*i;
    return sum;
}
//递归求解,分为三种情况
int fun(int m,int n)
{
    long sum;
    if(m<n)
        sum =0;
    else if(n==0)
        sum=1;
    else
        sum=fun(m,n-1)+fun(m-1,n);
    return sum;
}

int main(){
    int n,m;
    scanf("%d %d",&n,&m);
    long t=fun(n,m);
    printf("%d",t*st(n)*st(m));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值