• 北京信息科技大学第十一届程序设计竞赛G:kotori和抽卡(二)(排列组合)


    https://ac.nowcoder.com/acm/contest/940/G

    题目描述

    kotori最近喜欢上了lovelive这个游戏,因为她发现自己居然也是里面的一个人物。

    lovelive有个抽卡系统。共有R、SR、SSR、UR四个稀有度,每次单抽对应稀有度的概率分别是80%,15%,4%,1%。

    然而,kotori抽了很多次卡还没出一张UR,反而出了一大堆R,气得她想删游戏了。她想知道n次单抽正好出m张R卡的概率是多少?

    输入描述:

    两个正整数n和m(1<=m<=n<=50)

    输出描述:

    n次单抽正好出m张R的概率。保留四位小数。

    示例1

    输入

    复制

    1 1

    输出

    复制

    0.8000

    解题思路:

    公式:

    Cinom{m}{n}0.8^m*0.2^(n-m)

    #include <stdio.h>
    int main()
    {
    	double ans=1;
    	int n, m, i;
    	scanf("%d%d", &n, &m);
    	for(i=0; i<n-m; i++)
    		ans*=0.2;	
    	for(i=n; i>=n-m+1; i--)
    		ans*=i;
    	for(i=m; i>1; i--)
    		ans/=i;
    	for(i=0; i<m; i++)
    		ans*=0.8;	
    	
    	printf("%.4lf
    ", ans);
    	return 0;
    }

     为了防止溢出,最开始是写的下面一个代码,结果多此一举了。

    #include <stdio.h>
    int main()
    {
    	double ans=1;
    	int n, m, i;
    	scanf("%d%d", &n, &m);
    	if(m>n/2)
    	{
    		for(i=0; i<n-m; i++)
    			ans*=0.2;	
    	}
    	else
    	{
    		for(i=0; i<m; i++)
    			ans*=0.8;
    	}
    	for(i=n; i>=n-m+1; i--)
    		ans*=i;
    	for(i=m; i>1; i--)
    		ans/=i;
    	if(m>n/2)
    	{
    		for(i=0; i<m; i++)
    			ans*=0.8;	
    	}
    	else
    	{
    		for(i=0; i<n-m; i++)
    			ans*=0.2;
    	}
    	printf("%.4lf
    ", ans);
    	return 0;
    }
  • 相关阅读:
    分布式并行计算MapReduce
    备份
    【爬虫综合作业】猫眼电影TOP100分析
    爬取全部的校园新闻
    获取一篇新闻的全部信息
    爬虫原理
    中文词频统计
    复合数据类型,英文词频统计
    字符串、文件操作,英文词频统计预处理
    期末大作业
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852638.html
Copyright © 2020-2023  润新知