代码题--C++--牛客网--牛牛掷硬币--掷硬币全为正面或者全为反面的概率

23 篇文章 0 订阅
17 篇文章 0 订阅

代码题--C++--牛客网--牛牛掷硬币--掷硬币全为正面或者全为反面的概率


目描述

牛牛最近很喜欢掷硬币,由于他今天很无聊,所以他在家掷了n次硬币,如果这n次硬币全部朝上或者全部朝下牛牛就很开心,请问牛牛开心的概率是多少。(每次掷硬币朝上的概率与朝下的概率相同)

示例1
输入
1
返回值
"1.00"
说明
概率为1,四舍五入保留两位小数的字符串为"1.00"
示例2
输入
5
返回值
"0.06"
说明
概率为0.0625,四舍五入保留两位小数的字符串为"0.06"
备注:
对于50\%50%的数据:1\leq n\leq1001≤n≤100
对于100\%100%的数据:1\leq n\leq1e91≤n≤1e9
对于每个n,返回一个严格四舍五入保留两位小数的字符串。
比如概率为0.372的话,返回字符串"0.37"。
概率为0.957的话,返回字符串"0.96"。
(注意,返回的字符串不带引号)

解题思路,掷一次,答案为1.00,因为正反面都会开心,从第二次开始概率就是累计*0.5,最后将四舍五入保留小数后两位,C++中用sprintf函数处理。sprintf和printf很像,区别就是sprintf中第一个参数就是指向要写入的那个字符串的指针,其他和printf一样,为什么加0.001,是因为编译器不同,可能ans的取舍不同,为达到说明中的条件才+0.001.

代码如下:

class Solution {
public:
    /**
     * 返回一个严格四舍五入保留两位小数的字符串
     * @param n int整型 n
     * @return string字符串
     */
    string Probability(int n) {
        if(n >= 9)
        {
            return "0.00";
        }
        double ans = 1;
        for(int i = 1; i < n; i++ )
        {
            ans *= 0.5;
        }
        char printAns[10];
        sprintf(printAns,"%.2lf",ans+0.001 );
        return printAns;
    }
         /*
        if(n==1){
            string res="1.00";
            return res;
        } 
        if(n==2) {
            string res="0.50";
            return res;
        }
        if(n==3){
            string res="0.25";
            return res;
        }
        if(n==4){
            string res="0.13";
            return res;
        }
        if(n==5){
            string res="0.06";
            return res;
        }
        if(n==6){
            string res="0.03";
            return res;
        }
        if(n==7){
            string res="0.02";
            return res;
        }
        if(n==8){
            string res="0.01";
            return res;
        }
        string res="0.00";
        return res;
    }
    */  
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值