1.题目描述

今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:

  1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
  2. 待所有字条加入完毕,每人从箱中取一个字条;
  3. 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
    现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?

2.输入描述:

输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。

3.输出描述:

对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。

4.输入例子:

2

5.输出例子:

50.00%

6.解题思路:

还是错排问题,参考《发邮件》一题;
因为该题要求出错排概率,所以不仅要求出共有多少种错排情况,还有求共有多少种排序情况,错排种数/总排序种数=错排概率
错排公式就不多说了,总排序种数也就是求阶层
最后按题目格式输出即可

7.源代码:

#include<stdio.h>
int main()
{
	int i,n;
	long long p1[20]={0,0,1},p2[20]={0,1,2};//__in64
	for(i=3;i<21;i++)
	{
		p1[i]=(i-1)*(p1[i-1]+p1[i-2]);
		p2[i]=i*p2[i-1];
	}
	while(scanf("%d",&n)!=-1)
	{
		printf("%.2f%c\n",1.0*p1[n]/p2[n]*100,'%');
	}
	return 0;
}