定义:n个有序的元素应有n!种不同的排列。如果一个排列使得所有的元素都不在原来的位置上,则称这个排列为错排。任给一个n,求出1,2,3,。。。,n的错排个数D为多少,并且给出所有的错排方案
推理:
2 3 0
Case [1]: 50.00%. Case [2]: 33.33%.
#include<stdio.h> int main() { double a[55]; double b[55]; a[0]=1; for(int i=1;i<=22;i++) a[i]=a[i-1]*i; b[1]=0; b[2]=1; b[3]=2; for(int i=4;i<=22;i++) b[i]=(i-1)*(b[i-1]+b[i-2]); int n,d=1; while(~scanf("%d",&n),n) { printf("Case [%d]: ",d++); if(n==1) printf("100.00%%.\n"); else { printf("%.2lf%%.\n",100*b[n]/a[n]); } } }
原文地址:http://blog.csdn.net/u012349696/article/details/41871123