【蓝桥杯】抽卡游戏(Java实现)


/* 程序问题注释开始

  • 程序的版权和版本声明部分

  • Copyright © 2020,湖南工程职业技术学院信息工程学院学生

  • 文件名称: 蓝桥杯赛题

  • 作 者: 李 斌

  • 完成日期: 2020 年 04 月 09日

  • 对任务及求解方法的描述部分

  • 问题描述
      某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个“井”的机制,抽满k次卡后直接送这张限定卡。试求获得这张限定卡需要的期望抽卡次数。输入为一行,用空格隔开的p和k。输出为一行,即期望抽卡次数,取2位小数

  • 样例输入
      0.005 250

  • 样例输出
      142.88

  • 样例说明
      第1次抽到的概率为0.005
      第2次抽到的概率为(1 - 0.005) * 0.005
      第n次抽到的概率为(1 - 0.005)^(n - 1) * 0.005
      第250抽到的概率为之前都没有抽到的概率,即(1 - 0.005) ^ 249
      最终结果
      1 * 0.005 + 2 * (1 - 0.005) * 0.005 +…+ n * (1 - 0.005) ^ (n - 1) * 0.005 +…+ 250 * (1 - 0.005) ^ 249 = 142.88

    扫描二维码关注公众号,回复: 11904949 查看本文章
  • 数据规模和约定
      请使用double类型存储所有浮点数变量
      对60%的测试点,保证k≤1000,
      对100%的测试点,保证k≤1000000。
      如果程序过于低效,在k较大时会因超时而错误。

  • 程序问题注释结束

*/


import java.util.Scanner;
public class Main {
    
    

	public static void main(String[] args) {
    
    
		// TODO 自动生成的方法存根
		Scanner in=new Scanner(System.in);
		//用户输入抽卡游戏卡池抽出限定卡的概率
		double p=in.nextDouble();
		//用户输入抽卡次数
		int k=in.nextInt();
		double sum=0;
		//第i次抽到的概率
		for(int i=1;i<k;i++)
		{
    
    
			//概率和
			sum+=i*Math.pow(1-p,i-1)*p;
		}
		//最后抽到的概率为之前都没有抽到的概率
		sum+=Math.pow(1-p,k-1)*k;
		System.out.printf("%.2f",sum);
	}

}

运行结果:
运行结果

猜你喜欢

转载自blog.csdn.net/qq_46354133/article/details/105407979