C++米哈游编程题第3题:计算抽卡得到up角色的期望次数

/*
C++米哈游编程题第3题:计算抽卡得到up角色的期望次数
原来的代码是牛客的一位哈工大计算机大佬的python版本,
这里用chatGPT改为C++版本,输入 0.006, 得到 104.55
以下是chatGPT的回答
*/

#include <iostream>
#include <vector>

using namespace std;

int main() {
    double p;
    cin >> p;  // 从标准输入获取一个浮点数并存储在变量 p 中
    vector<double> tmp(181, 0.0);  // 创建一个长度为181的 double 类型的向量,并初始化所有元素为0.0

    auto wai = [&](double cur, int index) {  // 定义一个 lambda 函数 wai,接受两个参数 cur 和 index
        for (int i = 1; i < 90; i++) {
            tmp[index + i] += cur * p;  // 更新 tmp 向量中特定索引位置的元素
            cur = cur * (1 - p);  // 更新 cur 的值
        }
        tmp[index + 90] += cur;  // 更新 tmp 向量中另一个特定索引位置的元素
    };

    double cur = 1.0;  // 初始化变量 cur 为1.0
    for (int i = 1; i < 90; i++) {
        tmp[i] += cur * p / 2;  // 更新 tmp 向量中特定索引位置的元素
        wai(cur * p / 2, i);  // 调用 wai 函数,对 tmp 向量的一部分进行更新
        cur = cur * (1 - p);  // 更新 cur 的值
    }
    tmp[90] += cur / 2;  // 更新 tmp 向量中特定索引位置的元素
    wai(cur / 2, 90);  // 调用 wai 函数,对 tmp 向量的一部分进行更新

    double result = 0.0;
    for (int i = 0; i < tmp.size(); i++) {
        result += i * tmp[i];  // 计算 tmp 向量中所有元素的加权和,其中权重是元素的索引值
    }

    cout << result << endl;  // 打印结果到标准输出

    return 0;
}

全部评论

相关推荐

05-12 17:28
已编辑
门头沟学院 硬件开发
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
5
8
分享

创作者周榜

更多
牛客网
牛客企业服务