列表

详情


NC19777. 卡牌游戏

描述

小贝喜欢玩卡牌游戏。某个游戏体系中共有N种卡牌,其中M种是稀有的。小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝。普通卡可能多次出现,而稀有卡牌不会被重复抽到。小贝希望收集到K种稀有卡牌,她想知道期望需要多少次获胜才能实现这个目标。

输入描述

数据有多组,第一行一个整数T表示数据组数。
每组数据一行,三个整数N,M,K .

输出描述

对于每组数据,输出形如"Case #x: y",其中 x 为这组数据的编号(从1开始),y 为这组数据的答案。答案的绝对误差或相对误差在10-6以内都认为是正确的。

示例1

输入:

2
5 2 1
40 9 5

输出:

Case #1: 2.5
Case #2: 28.1146825397

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 45ms, 内存消耗: 476K, 提交时间: 2018-10-02 13:45:13

#include<stdio.h>
int main()
{
 int j,t,M,N,D,i;
 double y,E,K;
 scanf("%d",&t);
 for(j=1;j<=t;j++)
 {
     scanf("%d%d%d",&M,&N,&D);
     E=0;
     for(i=0;i<D;i++)
     E=E+1.0*(M-i)/(N-i);
     printf("Case #%d: %.7f\n",j,E);
 }
 return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 43ms, 内存消耗: 348K, 提交时间: 2018-10-02 13:32:47

#include "stdio.h"
int main(){
	double n,m,k,ans,t;
	int T,i,j;
	scanf("%d",&T);
	for(i=1;i<=T;i++){
		scanf("%lf%lf%lf",&n,&m,&k);
		t=ans=0;
		while(t<k){
			ans+=n/m;
			n--;
			m--;
			t++;
		}
		printf("Case #%d: %.6f\n",i,ans);
	}
}

Pascal(fpc 3.0.2) 解法, 执行用时: 92ms, 内存消耗: 128K, 提交时间: 2018-10-04 08:50:33

var
    s:real;
    t,i,n,m,k,j:longint;
begin
    readln(t);
    for i:=1 to t do
    begin
        read(n,m,k);
        s:=0;
        for j:=0 to k-1 do s:=s+(n-j)/(m-j);
        writeln('Case #',i,': ',s:0:10);
    end;
end.

C 解法, 执行用时: 13ms, 内存消耗: 332K, 提交时间: 2023-03-05 20:45:21

#include<stdio.h>
int main(){
	int i,T,N,M,K,No=1;
    double e;
	scanf("%d",&T);
	while(T--){
		e=0;
		scanf("%d%d%d",&N,&M,&K);
		for(i=0;i<K;i++) e+=1.0*(N-i)/(M-i);
		printf("Case #%d:%.7lf\n",No,e);
		No++;
	}
} 

Python3 解法, 执行用时: 1206ms, 内存消耗: 8472K, 提交时间: 2023-05-07 19:02:50

for j in range(1, int(input())+1):
    N, M, K = map(int, input().split())
    print(f"Case #{j}: {sum([(N-i)/(M-i) for i in range(K)])}")

上一题