定义: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