博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 2048 神、上帝以及老天爷 错排公式
阅读量:3903 次
发布时间:2019-05-23

本文共 1045 字,大约阅读时间需要 3 分钟。

 

Problem Description

HDU 2006'10 ACM contest的颁奖晚会隆重开始了!

为了活跃气氛,组织者举行了一个别开生面、奖品丰厚的抽奖活动,这个活动的具体要求是这样的:
首先,所有参加晚会的人员都将一张写有自己名字的字条放入抽奖箱中;
然后,待所有字条加入完毕,每人从箱中取一个字条;
最后,如果取得的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
大家可以想象一下当时的气氛之热烈,毕竟中奖者的奖品是大家梦寐以求的Twins签名照呀!不过,正如所有试图设计的喜剧往往以悲剧结尾,这次抽奖活动最后竟然没有一个人中奖!
我的神、上帝以及老天爷呀,怎么会这样呢?
不过,先不要激动,现在问题来了,你能计算一下发生这种情况的概率吗?
不会算?难道你也想以悲剧结尾?!

 

 

Input

输入数据的第一行是一个整数C,表示测试实例的个数,然后是C 行数据,每行包含一个整数n(1<n<=20),表示参加抽奖的人数。

 

 

 

Output

对于每个测试实例,请输出发生这种情况的百分比,每个实例的输出占一行, 结果保留两位小数(四舍五入),具体格式请参照sample output。

 

 

 

Sample Input

 

1 2

 

 

Sample Output

 

50.00%

 

 错排公式:

f(1)=0; f(2)=1;

f(n)=(i-1)*[f(n-1)+f(n-2)]

代码如下:

#include 
#include
#include
#include
using namespace std;const int maxn=25;int t,n;long long int dp[maxn];long long int sum[maxn];int main(){ sum[1]=1; sum[2]=2; dp[1]=0; dp[2]=1; for (int i=3;i<=20;i++) { dp[i]=(i-1)*(dp[i-1]+dp[i-2]); sum[i]=sum[i-1]*i; } scanf("%d",&t); while (t--) { scanf("%d",&n); printf("%.2lf%%\n",100.0*dp[n]/sum[n]); } return 0;}

 

转载地址:http://xxaen.baihongyu.com/

你可能感兴趣的文章
【Word 2010】重新开始编号
查看>>
【福听阅读器】为PDF文档添加书签和子书签
查看>>
【mathtype6.7】word2010公式编号
查看>>
【office 2010】word排版之长英文单词自动换行和英文对齐问题
查看>>
solidworks2011 打开后界面消失
查看>>
【VS2010】C++多线程同步与互斥简单运用
查看>>
宏定义中#跟##作用
查看>>
初次使用VS2010基于C++开发项目碰到的问题及解决方法
查看>>
error C2664: “CreateFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”
查看>>
调试串口通用程序的几种技巧
查看>>
GUI 编辑框中读写矩阵
查看>>
matlab成段注释
查看>>
matlab数据的导入和导出,以matlab工作区workspace为source和destination
查看>>
获取字节数
查看>>
福听阅读器 背景色设置
查看>>
保护眼睛 电脑设置
查看>>
【云端3.4 Beta】云端无法启动,从服务器返回了一个参照
查看>>
解决chrome下用google搜索图片第二页以后不显示的问题
查看>>
将163邮箱的通讯录导入到outlook2010
查看>>
winRar过期了,总弹出 “购买……”
查看>>