(图片都来源百度百科)

先说p(n,m),表示从n个不同元素中取出m个元素,并按次序排列的排列数,即字典序,组成的排列叫全排列。

若从n个不同元素中取出m个元素,不考虑次序,则称从n中取出m个组合,其组合数表示为C(n,m)=n!/m!*(n-m)!;

关于排列组合的性质用途太多了,下次再统一整理,这里只介绍求C(n,m)的两种方式


第一种:连乘m个整数商:

对于m个连续的自然数(n-m+1),(n-m+2),...n,必定有一个数能被m整除,也必定能有一个被m-1整除,因此,在运算过程中,按分母从大到小,及时的进行分子分母相除运算;然后连成m个整商。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll work(int n,int m){if(m>n/2) m = n-m;ll a = 1,b = 1;for(int i=1;i<=m;i++){a*=n+1-i;b*=i;if(a%b==0) a/=b,b=1;}return a/b;
}
int main(){int n,m;scanf("%d %d",&n,&m);//49 6 printf("%lld\n",work(n,m));//13983816 return 0;
} 

 方法二:利用二项式系数公式:

即c[i][0]=1,并且c[i][j] = c[i-1][j] + c[i-1][j-1]。

这个方法更加适用于多次询问,先离线计算出要问的范围,再直接查询问的n,m;

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll c[105][105];
void pp(){for(int i=0;i<102;i++) c[i][0]=1;for(int i=1;i<101;i++)for(int j=1;j<101;j++)c[i][j]=c[i-1][j] + c[i-1][j-1];
}
int main(){pp();int n,m;while(~scanf("%d %d",&n,&m) && (n||m)){//100 6printf("C(%d,%d) = %lld",n,m,c[n][m]);//1192052400}return 0;
} 

求排列组合的两种方式 模板相关推荐

  1. 求不同字母全排列两种递归模板

    // ABCDE 所有排列 public class B { // aa: 待排数据// k: 考虑的当前位置(数组下标)static void f(char[] aa, int k){if(k==a ...

  2. python电话号码对应的字符组合_Python3 两种方式查找字符串里的电话号码

    利用非正则表达式在字符串中查找电话号码. 查号码.py def isPhoneNumber(text): if len(text) !=12: return False for i in range( ...

  3. 模板设计模式的两种方式

    对于模板设计模式而言,一般有两种方式 1.基于继承的实现 2.基于组合的实现 基于继承实现模板设计: package org.zttc.itat.template;/*** 基于继承实现模板设计模式* ...

  4. 417,BFS和DFS两种方式求岛屿的最大面积

    想了解更多数据结构以及算法题,可以关注微信公众号"数据结构和算法",每天一题为你精彩解答.也可以扫描下面的二维码关注 给定一个包含了一些0和1的非空二维数组grid . 一个岛屿是 ...

  5. Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM)

    Python两种方式求多个数的最大公因数(HCF)和最小公倍数(LCM) 最大公因数 1. 列表排序 2. 将列表分为两部分 3. 求最大公因数的质因子 4. 得到结果 5. 完整程序 最小公倍数 另 ...

  6. Java练习:两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和

    Java两种方式求 1+1/2!+1/3!+1/4!+... 前20项的和: 感叹号 !是阶乘的意思,如 2! .3! .4! 分别是:1*2 . 1*2*3 .1*2*3*4  第一种算法,如下代码 ...

  7. Unity编辑器开发——通过模板创建Lua脚本的两种方式(二)

    个人学习笔记,如有错误.疑问.建议,欢迎留言. 本文有关代码转载自:Unity3D 扩展编辑器实现创建Lua脚本 - 知乎 (zhihu.com) 声明:本文转载已取得原文章作者同意,有兴趣的可以关注 ...

  8. php 将二维数组合并,PHP二维数组合并排重的两种方式

    业务中需要统计一段时间投票独立的用户数,涉及到数组的排重,用传统array_unique()发现,当数据量达到百万级后, 设置的1G内存都耗尽了,仍然没有统计完.而用array_flip()发现不仅可 ...

  9. html中获取modelandview中的json数据_从Bitmap中获取YUV数据的两种方式

    从Bitmap中我们能获取到的是RGB颜色分量,当需要获取YUV数据的时候,则需要先提取R,G,B分量的值,然后将RGB转化为YUV(根据具体的YUV的排列格式做相应的Y,U,V分量的排列) 所以这篇 ...

  10. 运行python程序的两种方式交互式和文件式_Python基础知识2

    运行Python程序的两种方式 小白学习,如有错误欢迎指点 一.每位小白写的第一个Python程序 1.运行Python程序的两种方式 1.1 交互式模式(即时对话) 打开cmd,打开Python解释 ...

最新文章

  1. 为何云原生在吞噬世界 ?
  2. 2015 NOIP day2 t2 信息传递 tarjan
  3. awk 分隔符_awk命令使用实例
  4. TypeError: 'function' object is not subscriptable
  5. java knn分类_返回2个或更多最近邻居的KNN算法
  6. 调参方法论:如何提高机器学习模型的性能?
  7. neo4jcypher基本语句
  8. 使用独立PID namespace防止误杀进程
  9. ipa 上传卡在鉴权_Application Loader上传app,一直卡在“正在通过 App Store 进行鉴定”...
  10. 揭秘!开源软件背后的神秘组织
  11. C语言和三菱plc通讯,三菱PLC的通讯与编程,附实际案例
  12. 苹果系统连接服务器打印机,Mac系统怎么连接打印机
  13. java计算机毕业设计英语学习网站设计与实现MyBatis+系统+LW文档+源码+调试部署
  14. 广告文案:用文案讲好故事的广告是如何做?
  15. 电脑公司 GHOST_XP SP3 装机版V2013
  16. No3 jQuery
  17. 高德地图 搜索店名获取经纬度
  18. ime with the \acknowledge=true\ parameter:,watcher:[Watcher will be disabled
  19. 一、针对工业领域线圈小目标检测,基于Yolov5s网络改进检测头实验及其检测效果对比
  20. 入侵oracle数据库时常用的操作命令整理

热门文章

  1. php 新历转农历,PHP实现阳历转阴历的方法
  2. UWP 学习笔记 二
  3. 安装UWP版网易云音乐
  4. SAP MM 供应工厂1050和凭证类型ZIC没有定义供货类型
  5. 第六章:Reminders实验:第二部分[Learn Android Studio 汉化教程]
  6. uni-app uni.request简单封装(请求头配置及response处理)
  7. 安装ruby1.9.3-p0及redmon来监控redis
  8. Polarized 3D翻译
  9. unity webgl 手机端微信直接打开链接
  10. 企业合并_OA替换 | K2 BPM 为你解决企业“变革”大烦恼