Hduoj 2048【誤排】【水題】

2106 ワード

神様、神様、神様
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 22664    Accepted Submission(s): 9542
Problem Description
HDU 2006'10 ACM contestの授賞式が盛大に始まりました!
雰囲気を盛り上げるために、組織者は個別に生麺を開き、賞品が豊富な抽選活動を行いました.この活動の具体的な要求はこうです.
まず、パーティーに参加したすべての人は自分の名前が書かれたメモを抽選箱に入れた.
それから、すべてのメモが入ってから、一人一人が箱からメモを取ります.
最後に、取得したメモに自分の名前が書かれていれば、「おめでとう、当選しました!」
当時の盛り上がりを想像してみてください.当選者の賞品はみんなが夢見ていたTwinsサイン写真ですね.しかし、すべてのデザインを試みた喜劇が悲劇的に終わるように、今回の抽選活動は最後に当選した人は一人もいなかった.
私の神、神と神様、どうしてこんなことになったのですか.
しかし、まず興奮しないでください.今問題が来ました.このような状況が発生する確率を計算してもらえますか.
計算できないの?あなたも悲劇で終わりたいの?!
 
Input
入力データの最初の行は整数Cであり、試験例の個数を表し、次いでC行データであり、各行には整数n(1 
Output
各テストインスタンスについて、このような状況が発生した割合を出力してください.各インスタンスの出力は1行を占め、結果は2桁の小数(四捨五入)を保持します.具体的なフォーマットはsample outputを参照してください.
 
Sample Input

   
   
   
   
1 2

 
Sample Output

   
   
   
   
50.00%

 
Author
lcy
 
Source
繰返し求解特別テーマ練習(For Beginner) 
問題:n対1で対応するデータを与えて、1対1で選択した後に1対1で対応する確率を探し当てることができないことを求めます.
構想:そのうちの1つの数n対が対応しないデータを選択すると、総対数はD(n)となり、 nとペアの数をkとすると、kは次に2つのケースを選択する、  1つはnとの対応データのペアリングであり、1つはそうでなければ、総ペアリング状況は(n−1)*D(n−2)である.そうでなければ、総ペアリング状況は(n-1)*D(n-1)である.だからD(n)= (n−1)*(D(n−1)+D(n−2)),これが繰返し式であり,次いで確率pを算出する.
すなわちp=D(n)/n!;
注意:nの範囲は1~20,20!64ビットを使います.
#include<stdio.h>
int main()
{
	__int64 i, j, k, n, a[22], b[22];
	double p;
	a[1] = 0;
	a[2] = 1;
	b[1] = 1;
	for(i = 3; i < 22; i++)
	a[i] = (i-1) * (a[i-1] + a[i-2]);
	for(i = 2; i < 22;i++)
	b[i] = i * b[i-1];
	scanf("%I64d", &n);
	while(n--)
	{
		scanf("%I64d", &k);
		p = (double)a[k] / (double)b[k];
		printf("%.2lf%%
", p*100.0); } return 0; }