原题链接:click here
这是一个错排加古典概率的题目。
题目大意:有n个人抽签,签上写着每个人的名字。所有的人都抽错的概率。
解题思路:首先,所有的人都抽错是n个数的错排数,由错排公式:a[i]=(i-1)*(a[i-1]+a[i-2])可以求得。总共的抽签数,可以由n个数的全排列数求得。即:n!
概率p=a[n]/n!
代码如下:
#include<stdio.h> int main() { int c,n,i; double p,k,a[22]; a[1]=0;a[2]=1;a[3]=2; for(i=4;i<=20;i++) { a[i]=(i-1)*(a[i-1]+a[i-2]);//错排公式 } scanf("%d",&c); while(c--) { scanf("%d",&n); k=1; for(i=1;i<=n;i++)//求n的阶乘 { k*=i; } p=a[n]/k;//错排占全排的比例 printf("%.2lf%%\n",p*100); } return 0; }