题解 | 排列组合法 #网格走法数目#

网格走法数目

https://www.nowcoder.com/practice/e27b9fc9c0ec4a17a5064fb6f5ab13e4

#include <stdio.h>
//由题目知道,在x*y的网格中,我们只能向下x次,和向右y次
//每一次都是一个决策点
//题目简化为在(x+y)步中选择x次向下(或者y次向右)
//也就是排列组合中的组合
int main() {
    int x=0,y=0;
    scanf("%d %d",&x,&y);
    
    long long sum=1;//排列数(用long long 不用 int 是因为数字太大越界了)
    int num=1;//阶乘
    int times = x + y ;//向右和向下的次数和

    for(int i=1;i<=y;i++) 
    {
    sum*=times--;
    num*=i;//算阶乘
    }
   
    printf("%lld\n",sum/num);// 排列数除以阶乘就是组合数
    return 0;
}
//ps:该方法只能算较小的数,大数有可能超出数字范围

全部评论

相关推荐

头像
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务