排列与组合

话说,初一的时候看到这样一道题:有一种彩票中奖率为1%,买一百张是不是一定能中奖?答案自然是否定的,但我在想,如果有200张彩票,两张有奖,买一百张中奖率是多少?一天晚上睡觉的时候真的忽然想出来了(那时还没有学排列组合,自己想出了组合公式),最后算出来大约是75%。(相信学过OI的同学就不用看本文了)
 
 
先解决这个问题:两百张彩票,买一百张有多少种排列方式?当年我就是在脑海里构造了一个类搜索树的东西(好吧,二维的线性搜索树……),简单地说我们买第一张彩票的时候有200种方案可选,买第二张时由于之前被买走了一张,所以有199种方案……最后的总方案数为200X199X198……X101,也即为200!÷100!。这里说的是排列方式,那组合呢?可以发现,对于每一种组合方式,都有100!种组合方式,所以组合的总数为200!÷(100!X100!)。
 
 
那这么多组合方式中,有多少种能中奖呢?事实上,算一下不能中奖的方式会更方便,除去两张有奖的,不能中奖的方案数为:198!÷(98!X100!)(不解释),再除一下,约去1/100!和198!÷100!,剩下(100X99)/(200X199)约为25%,中奖几率就是1-25%=75%。
 
 
除了这里说到的排列和组合,还有一种圆周排列,以上面的数据为例,因为每一种排列被重复算了100次,所以就只要在排列的总数的基础上除以100就好了,也即200!÷(100!X100)。
   
最后归纳一下,对于从n个数中选出m个数的排列方案数为:n!÷(n-m)!,组合数为:n!÷[(n-m)!*m!] ,圆周排列数为:n!÷[(n-m)!*m]。
   
至于此类公式衍生出的题型和方法实在不胜枚举,这里就不详述了,其实也很简单:机智才是王道!

时间: 2024-10-22 19:28:28

排列与组合的相关文章

排列与组合的一些定理

一,加法原理与乘法原理 加法原理与乘法原理是排列与组合的基础.加法原理本质上是分类,乘法原理本质上是分步. 分类,就是把一个集合(某事物)分成互不相交的若干独立的部分.比如,概率论中的全概率公式就将事件分成”全划分“ 分类思想可以简化程序的时间复杂度.比如:最短路径算法-Dijkstra算法的应用之单词转换(词梯问题) 分步,就是第一步干嘛,第二步再干嘛……比如A地到D地,第一步:先到达B地:第二步,再到达C地 二,排列 P(n,r)表示从n个数中选择r个数的一个全排列 公式:P(n,r)=P(

似兄弟的排列与组合

大家还记得我们在高中或者是在初中(具体什么时候忘记了)的时候在数学上学的排列与组合吗?记得那时候我的数学老师非得让我们把排列与组合的定义背的滚瓜烂熟的,但是,我到现在也背不上来,如今,在编程上又让我们相见,哈哈,缘分呐! 现在,就让我们一起回顾一下什么叫作排列,什么叫作组合吧. 1.排列 定义:在数学上--从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做

排列与组合的实现

排列与组合,递归实现 // Permutation and Combination.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<vector> #include<set> #include<iostream> using namespace std; vector<vector<int>>aaa; set<set<int>>solu; voi

从排列到组合——深度优先搜索

前段时间在洛谷3.0上刷到一个题,让本人挠头了一段时间,RT: 题目描述 已知 n 个整数 x1,x2,-,xn,以及一个整数 k(k<n).从 n 个整数中任选 k 个整数相加,可分别得到一系列的和.例如当 n=4,k=3,4 个整数分别为 3,7,12,19 时,可得全部的组合与它们的和为: 3+7+12=22  3+7+19=29  7+12+19=38  3+12+19=34. 现在,要求你计算出和为素数共有多少种. 例如上例,只有一种的和为素数:3+7+19=29. 首先解决这个问题显

排列和组合

排列和组合在我们高中的时候是最熟悉不过的数学词了,接下来找找这方面的题目供大家思考 (1)爬楼梯 一个楼梯有50个台阶,每一步可以走一个台阶,也可以走两个台阶,请问走完这个楼梯共有多少种方法? (2)铺砖头 有一个长度为n,宽度为2的地面,有若干块长为2,宽为1的地砖,请问用此地砖铺完这个地面共有多少种方法? (3)自然数拆分 给定一个自然数n,将其拆分为若干个自然数字之和,请问有多少种方法? (4)1分2分和5分多少种组合一角的方法 (5)放苹果

经典算法学习之分治法(以排列、组合程序为例)

分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解. 分治法在每层递归是遵循的三个步骤: (1)分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例. (2)解决这些子问题,队规的求解各个子问题,当子问题规模足够小的时候,直接求解. (3)合并这些子问题的解构成原问题的解. 显然归并排序是一个非常经典规矩的分治法的例子,鉴于之前已经写过一篇关于归并排序的博文,这里不在使用归并排序作为例子. 注意分治法的每一层递归

不同元素的排列与组合

#include<iostream> #include<vector> #include<string> #include<algorithm> #include<numeric> using namespace std; vector<vector<int> > ret; vector<int> sub; int num = 0; void helper(int* str, int n,int i) ///递

排列和组合的求解

1)使用“分类计数原理”还是“分步计数原理”要根据我们完成某件事时采取的方式而定,可以分类来完成这件事时用“分类计数原理”,需要分步来完成这件事时就用“分步计数原理”:那么,怎样确定是分类,还是分步骤?“分类”表现为其中任何一类均可独立完成所给的事件,而“分步”必须把各步骤均完成才能完成所给事件,所以准确理解两个原理强调完成一件事情的几类办法互不干扰,相互独立,彼此间交集为空集,并集为全集,不论哪类办法都能将事情单独完成,分步计数原理强调各步骤缺一不可,需要依次完成所有步骤才能完成这件事,步与步

OI内的排列与组合(简单版)

§1基本原理 △让我们来看下面问题: 从甲地到乙地,可以乘火车,也可以乘汽车,还可以乘轮船.一天中,火车有4班,汽车有2班,轮船有3班.那么,一天中乘坐这些交通工具从甲地到乙地共有多少种不同走法?△分析:因为从甲地到乙地,乘火车有4种选择(方法),乘汽车有2种选择(方法),乘轮船有3种选择(方法).因此,一天中乘坐这些交通工具从甲地到乙地共有:4+2+3 = 9种不同的方法. ▲一般地,做一件事,完成它可以有n类方法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,……,在第