错排的简单理解
来源:互联网 发布:抢红包算法 编辑:程序博客网 时间:2024/05/17 16:11
考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。
数学原理:组合数学。
这里只说对递推公式的理解,D(n)=(n-1)*(D(n-1)+D(n-2));
当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(n)表示,那么D(n-1)就表示n-1个编号元素放在n-1个编号位置.
例如:有abcde五个元素,分别对应12345五个位置,假设当n个编号元素放在n个编号位置,元素编号与位置编号各不对应的方法数用D(5)表示,可以用组合数学思想一个一个元素的分析,首先在1位置放元素,除去a共有4个元素可供选择,再来看2位置,这里有两种情况
(1):当1 位置放b元素时,其余元素(即三个元素)的排列方法有D(5-2)种;
(2):当1位置不放b元素时,2位置有四种选择,即其余位置有D(4)种排列方法;
以此类推,D(n)=(N-1)*(D(n-1)+D(n-2));
显然用递归写这个算法再好不过啦,其中可以把两个特例D(1)=0,D(2)=1作为递归的终止条件;
参考代码:
#include<stdio.h>
int f(int n)
{
if(n==1)
return 0;
else if(n==2)
return 1;
else
return (n-1)*(f(n-1)+f(n-2));
}
int main()
{
int a;
while(scanf("%d",&a)==1)
{
printf("%d\n",f(a));
}
return 0;
}
0 0
- 错排的简单理解
- 错排的简单理解
- 错排公式的理解
- 实现序列简单的全排、错排、组合
- 快排、堆排、归并排 的理解
- 乐观锁、悲观锁、共享锁和排它锁的简单理解
- 简单的快排函数
- 一个简单的快排
- hdu2068 RPG的错排(错排公式简单应用)
- 【QT+VC】 error LNK2001: error LNK2019 的简单排错
- 杭电hdu 2068 RPG的错排 简单题
- hdu 2048 , 2049 ,2068 (错排公式的简单应用)
- zoj 1619 Present(错排公式的简单应用)
- 我理解的倒排索引
- 全文检索:倒排索引的理解
- HDOJ 2048简单错排、2049组合错排
- 一个简单的生产排程软件
- 一个简单的生产排程软件
- 测试空间是否开启pfsockopen函数
- DPM(Defomable Parts Model) 源码分析
- 各种常用的JSON接口,天气,手机归属地,IP地理位置,QQ空间,优酷,微博,等
- 重启apache2,提示Could not reliably determine the server's fully qualified domain name,
- ORACLE expdp与impdp用法整理及高导低版本问题的解决
- 错排的简单理解
- 开源机器人控制软件OROCOS
- mybatis generator Date类型时间丢失
- 程序员的小年
- Java中File,byte[],Object间的转换
- 微信素材接口
- tomcat org.apache.catalina.core.StandardContext startInternal
- maven自定义本地仓库目录
- Longest Valid Parentheses