博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算组合数
阅读量:3947 次
发布时间:2019-05-24

本文共 1089 字,大约阅读时间需要 3 分钟。

计算组合数

Time Limit: 1000 ms Memory Limit: 32768 KiB

Problem Description

计算组合数。C(n,m),表示从n个数中选择m个的组合数。
计算公式如下:
若:m=0,C(n,m)=1
否则, 若 n=1,C(n,m)=1
否则,若m=n,C(n,m)=1
否则 C(n,m) = C(n-1,m-1) + C(n-1,m).

Input

第一行是正整数N,表示有N组要求的组合数。接下来N行,每行两个整数n,m (0 <= m <= n <= 20)。

Output

输出N行。每行输出一个整数表示C(n,m)。
Sample Input
3
2 1
3 2
4 0
Sample Output
2
3
1

代码如下:

第一种方式函数:

#include 
#include
int c(int n,int m){ int y; if(m==0)y=1; else if(n==1)y=1; else if(m==n)y=1; else y=c(n-1,m-1)+c(n-1,m); return y;}int main(){ int n,m,t; scanf("%d",&t); while(t--) { scanf("%d%d",&m,&n); printf("%d\n",c(m,n)); } return 0;}

第二种方式数组:

#include 
#include
int main(){ int n,m,t; int s[21][21]; for(n=1;n<=20;n++) { for(m=0;m<=20;m++) { if(m==0)s[n][m]=1; else if(n==1)s[n][m]=1; else if(m==n)s[n][m]=1; else s[n][m]=s[n-1][m-1]+s[n-1][m]; } } scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); printf("%d\n",s[n][m]); } return 0;}

转载地址:http://pzhwi.baihongyu.com/

你可能感兴趣的文章
电信运营商如何进行客户细分
查看>>
c++名库介绍
查看>>
boost1.43在win7下的编译
查看>>
VC++工程如何脱离VSS环境
查看>>
转 hook 自绘原理
查看>>
NSIS 脚本介绍
查看>>
记录通讯日志的函数
查看>>
c++ 标准容器介绍与对比
查看>>
web DB优化思路
查看>>
敏捷笔记
查看>>
SOA业务理解与应用
查看>>
Google File System(中文翻译)
查看>>
Google's BigTable 原理 (翻译)
查看>>
MapReduce:超大机群上的简单数据处理
查看>>
设计模式笔记(转载)
查看>>
加站点加入IE的可信站点做法
查看>>
软件研发中的《破窗理论》
查看>>
敏捷的三种误区和五种改进
查看>>
用数字来看某知名B2C网站的发展内幕和隐私
查看>>
vs2010一些设置
查看>>