转 排列组合

(常考)错位排列 有N封信和N个信封,每封信都不装在自己信封里的排列种数记作Dn,则 D1=0,D2=1,D3=2,D4=9,D5=44,D6=265

 一、相邻问题---捆绑法 不邻问题---插空法
对于某几个元素不相邻的排列问题,可先将其他元素排好,再将不相邻元素在已排好的元素之间及两端空隙中插入即可。

【例题1】一张节目表上原有3个节目,如果保持这3个节目的相对顺序不变,再添进去2个新节目,有多少种安排方法?

A.20 B.12 C.6 D.4

【答案】A。

【解析】

以下内容需要回复才能看到

首先,从题中之3个节目固定,固有四个空。所以一、两个新节目相邻的的时候:把它们捆在一起,看成一个节目,此时注意:捆在一起的这两个节目本身也有顺序,所以有:C(4,1)×2=4×2=8种方法。二、两个节目不相邻的时候:此时将两个节目直接插空有:A(4,2)=12种方法。综上所述,共有12+8=20种。

二、插板法
一般解决相同元素分配问题,而且对被分成的元素限制很弱(一般只要求不等于零),只对分成的份数有要求。

【例题2】把20台电脑分给18个村,要求每村至少分一台,共有多少种分配方法?

A.190 B.171 C.153 D.19

【答案】B。

【解析】

以下内容需要回复才能看到

此题的想法即是插板思想:在20电脑内部所形成的19个空中任意插入17个板,这样即把其分成18份,那么共有: C(19,17)=C(19,2)=171种。

三、特殊位置和特殊元素优先法
对有限制的排列组合问题中的特殊元素或特殊位置优先考虑。

【例题2】从6名运动员中选4人参加4×100米接力,甲不跑第一棒和第四棒的参赛方案各有多少种?

A.120 B.240 C.180 D.60

【答案】B。

【解析】

以下内容需要回复才能看到

方法一:特殊位置优先法:首先填充第一棒,第一棒共有5个元素可供选择,其次第4棒则有4个元素可以选择;然后第2棒则有4个元素可以选择,第3棒则有3个元素可以选择。则共有5×4×4×3=240种。

方法二:特殊元素优先法:首先考虑甲元素的位置

第一类,甲不参赛有A(5,4)=120种排法;

第二类,甲参赛,因只有两个位置可供选择,故有2种排法;其余5人占3个位置有A(5,3)=60种占法,故有2×60=120种方案。

所以有120+120=240种参赛方案。

四、逆向考虑法
对于直接从正面算比较复杂的排列、组合题,我们就要学会间接的方法。

正方体8个顶点中取出4个,可组成多少个四面体?

A.70 B.64 C.61 D.58

【答案】D。

【解析】

以下内容需要回复才能看到

所求问题的方法数=任意选四点的组合数-共面四点的方法数,共C(8,4)-12=70-12=58个。

五、分类法
解含有约束条件的排列组合问题,应按元素性质进行分类,按事情发生的连续过程分步,保证每步独立,达到分类标准明确,分步层次清楚,不重不漏。

【例题3】五个人排成一排,其中甲不在排头,乙不在排尾,不同的排法有

A.120种 B.96种 C.78种 D.72种

【答案】C。

【解析】

以下内容需要回复才能看到

由题意可先安排甲,并按其分类讨论:1)若甲在末尾,剩下四人可自由排,有A (4,4)=24种排法;2)若甲在第二,三,四位上,则有3×3×3×2×1=54种排法,由分类计数原理,排法共有24+54=78种,选C。

练习题:

1、丙丁四个人站成一排,已知:甲不站在第一位,乙不站在第二位,丙不站在第三位,丁不站在第四位,则所有可能的站法数为多少种?

A.6 B.12 C.9 D.24

2、马路上有编号为l,2,3,……,10十个路灯,为节约用电又看清路面,可以把其中的三只灯关掉,但不能同时关掉相邻的两只或三只,在两端的灯也不能关掉的情况下,求满足条件的关灯方法共有多少种?

A.60 B.20 C.36 D.45

3、用数字0,1,2,3,4,5组成没有重复数字的四位数,可组成多少个不同的四位数?

A .300 B.360 C.120 D.240

4、10个名额分配到八个班,每班至少一个名额,问有多少种不同的分配方法?

A.45 B.36 C.9 D.30

5、六人站成一排,求甲不在排头,乙不在排尾的排列数?

A.120 B.64 C.124 D.136
【参考答案及解析】:

以下内容需要回复才能看到

1、【解答】C。能站在第一位,因此甲必然站在后三个位置中的某一个位置。

如果甲站在第二位,则共有三种可能:乙甲丁丙,丙甲丁乙,丁甲丙乙

如果甲站在第三位,则共有三种可能,乙丁甲丙,丙丁甲乙,丁丙甲乙

如果甲站在第四位,则共有三种可能,乙丙丁甲,丙丁乙甲,丁丙乙甲

因此一共有9种可能

2、【解答】B。关掉的灯不能相邻,也不能在两端。又因为灯与灯之间没有区别,因而问题为在7盏亮着的灯形成的不包含两端的6个空中选出3个空放置熄灭的灯。所以共C(6,3)=20种方法。

3、【解答】A。排除法解P(6,4)-P(5,3)个=300个

4、【解答】B。把10个名额看成十个元素,在这十个元素之间形成的九个空中,选出七个位置放置档板,则每一种放置方式就相当于一种分配方式。因而共C(9,7)=36种。

5、【解答】D。先考虑排头,排尾,但这两个要求相互有影响,因而考虑分类。

第一类:乙在排头,有A(5,5)种站法。

第二类:乙不在排头,当然他也不能在排尾,有C(4,1)×(4,1)×(4,4)种站法,故共有136种站法。

时间: 2024-09-09 23:16:32

转 排列组合的相关文章

java-JAVA 生成 用0到9这十个数字 所有的排列组合(0不能再第一个)

问题描述 JAVA 生成 用0到9这十个数字 所有的排列组合(0不能再第一个) 用 0到9 生成 十位数的所有排列组合,数字0不能在第一个,这个生成的十位数, 不能有重复的数字. 解决方案 public static void main(String[] args) { String str[] = { "0", "1", "2", "3", "4", "5", "6"

C#非递归方式实现排列组合

C#以非递归方式实现三位排列组合,如下代码: //深度优先  class Program      {          static void Main(string[] args)          {              int[] number = new int[] { 1, 3, 5, 7 };              List data = new  List();              Stack openStack = new Stack();           

计算排列组合的php代码

前些天因为业务需要写了一段计算排列组合的代码,今天整理了一下,以备后用 <?php/** * 要解决的数学问题    :算出C(a,1) * C(b, 1) * ... * C(n, 1)的组合情况,其中C(n, 1)代表从n个元素里任意取一个元素 * * 要解决的实际问题样例:某年级有m个班级,每个班的人数不同,现在要从每个班里抽选一个人组成一个小组, *                       由该小组来代表该年级参加学校的某次活动,请给出所有可能的组合 */ /* ##########

浅析实现排列组合查询算法

所谓的排列组合查询就相当于GOOGLE高级查询中"包含以下全部的字词"查询,也就是说查询中必须包含所有查询关键词,而且他们的顺序可以是任意.以下程序段实现了这一功能.比如输入查询关键字:tom tina则最一般的情况是在程序中使用类似于"select sex from student where name like '%tom%tina%' or name like '%tina%tom%' ordered by age" 的查询语句实现以上的查询,因此如何得到'%

关于各种排列组合java算法实现方法

一.利用二进制状态法求排列组合,此种方法比较容易懂,但是运行效率不高,小数据排列组合可以使用 复制代码 代码如下: import java.util.Arrays; //利用二进制算法进行全排列 //count1:170187 //count2:291656 public class test { public static void main(String[] args) { long start=System.currentTimeMillis(); count2(); long end=S

PHP中排列组合及性能对比

  排列组合公式/排列组合计算公式公式P是指排列,从N个元素取R个进行排列. 公式C是指组合,从N个元素取R个,不进行排列了,但在php中我们可以用N种方法写出来了,但每一种写法的性能会不同,下面我们就来看看吧. 需求是这样的: 找到数组中所有可能的指定长度的组合,要求没有重复. 方法一: 代码如下   function getCombinationToString($arr,$m){ $result = array(); if ($m ==1){ return $arr; } if ($m =

字符 生成-简单的字符生成器-排列组合

问题描述 简单的字符生成器-排列组合 想要实现以下图片上的功能,上方选中我需要用的字母.数字,输入我需要生成的位数,最终列出所有的排列组合数据.求人帮忙,万分感谢. 解决方案 关键就是算法http://bbs.bccn.net/thread-347026-1-1.htmlhttp://outofmemory.cn/code-snippet/4237/c-pailie-zuhe-suanfa 解决方案二: 楼上说的对,关键就是排列组合的算法.最近做了有关排列组合的东西,代码是JAVA的,你是用什么

集合-排列组合 找真子集 不包含空集

问题描述 排列组合 找真子集 不包含空集 ** void solve(int cur_totalvar, int nextVar){ // 解决向量选择子集并求和 放到向量 for (int i = 0; i<cur_totalvar; ++i){ printf("%f ",num[i]); printf("chengchangshengn"); // ??? 放入变量 sunMombre.sun += num[i]; } if(cur_totalvar){

参数的排列组合3

如何获取排列组合的所有值呢? 之前咱们是求排列组合的取值个数,现在要求取值 首先我们考虑常规的情况: 我们有n个盒子,分别放置n个元素 第一回:我们从n个里面选择一个:有n种可能 第二回:我们从n-1个里面选择一个:有n-1种可能 第三回:我们从n-2个里面选择一个:有n-2种可能 第四回:我们从n-3个里面选择一个:有n-3种可能 -- 最后我们只有一个可选 直接上代码: /*** * @param base :[a,b,c,d] * @param times * @param remaini

数组-想找到一个排列组合的算法

问题描述 想找到一个排列组合的算法 比如数组里有1-500的非连续数值, 当传入345这样一个数值进来时, 可以从数组里拿出N个数值相加得到345这个值的方案, 且要求相加数值个数最少,或最接近的组合优先获取出来 解决方案 2009年1月15日 沈阳 晴?? 为解决1月7日遇到的排列组合的难题,进行了以下题目的研究,并用C#实现了一个非递归的算法.有一个List,List中存有N个对象,要求做出这N个对象所有无序组.?数学公式:组合数=C(n1) + C(n2) + ...... + C(nn)