错位排列的魅力
2016-11-10 01:55
148 查看
错位排列:即n个有编号的人各自抽不中自己的号码
以下证明其公式为:f(n)=(n-1)*(f(n-1)+f(n-2))
首先是第一个人,称为1号
1号不抽取自己,有(n-1)种抽取方法
假设1号抽中2号
有两种情况:1、2号也抽中了1号,于是剩下n-2个自己进行错位排列,得f(n-2)种
2、2号没有抽中1号,则必有后面的抽中1号,于是此时将2号当作1号,即假设后面抽到的1号是2号,于是又有f(n-1)种
所有可以证得<pre name="code" class="cpp">f(n)=(n-1)*(f(n-1)+f(n-2))
以下是一个应用实例:
hd2048,也是递归思想
#include <stdio.h> int main(void) { int n,i,k,l,a; long long int fb[2],t; double j; scanf("%d",&n); for(k=0;k<n;k++) { scanf("%d",&a); fb[0]=1,fb[1]=2; for(l=3;l<a;l++) { t=fb[1]; fb[1]=(l)*(fb[1]+fb[0]); fb[0]=t; } /*printf("%lld %lld",fb[0],fb[1]);*/ for(i=1,j=1;i<=a;i++) j*=i; if(a==1) printf("%.2f%%\n",100.0); else if(a<4) printf("%.2f%%\n",(double)((int)(fb[a-2]/j*10000+0.5))/100); else printf("%.2f%%\n",(double)((int)(fb[1]/j*10000+0.5))/100); } return 0; }
还有补充一点:
即四舍五入的方法:
(int)(a+0.5)
利用了系统的截断,可以获得四舍五入的数!
相关文章推荐
- 错位排列的魅力
- 错位排列递推公式推导
- HDU_2048——全错位排列递推公式
- 错位排列及有关例题
- 全错位排列
- 错位排列-信封问题
- 错排问题,错位排列
- HDU_2049——部分错位排列,概率论
- uva11481 Arrange the Numbers(错位排列)
- 【BZOJ4517】【Sdoi2016】排列计数 线性逆元 错位排列
- 高精度和错位排列
- 全错位排列
- 错位排列
- [ACM] hdu 2048 神、上帝以及老天爷 (错位排列公式)
- 全错位排列
- hdu2048 错位排列
- HDOJ2048(错位排列)
- [ACM] hdu 2048 神、上帝以及老天爷 (错位排列公式)
- fzu 2282(错位排列+逆元+快速幂函数)
- BZOJ 4517 浅谈错位排列组合计数