【问题标题】:Random number by percentages C++按百分比计算的随机数 C++
【发布时间】:2020-05-29 15:54:41
【问题描述】:

所以问题是随机球的范围是 0-100(100%),而 30% 可以是红色,20% 可以是蓝色,50% 可以是绿色,我是这样做的: 如果几率小于 20 则 cout red 如果几率小于 50 则选蓝 如果机会小于或等于 100,则选择绿色 有什么建议可以解决这个问题吗?

【问题讨论】:

    标签: loops if-statement random


    【解决方案1】:

    百分比的最佳表示是浮点数,0% 是 0,100% 是

    谢天谢地,C# 为此提供了一个很棒的自以为是的函数:Random.NextDouble()

    要生成随机浮点数,只需像这样调用它:

    随机种子_随机数_生成器=新随机(); red_portion = seeded_random_number_generator.NextDouble();

    最后要使用你的双倍,只需将它乘以另一个因素。

    area_to_paint_red = red_portion * shape_area

    参考: https://docs.microsoft.com/en-us/dotnet/api/system.random.nextdouble?view=netframework-4.8

    【讨论】:

    • 1.原因既有数学上的,也有架构上的:所有可能的浮点数中有四分之一可以在 0 和 1 之间找到。不要使用 0 到 100 的范围,0 到 1 之间的可能表示比 1 到 100 的表示更密集,0 到 1 之间的数字比 1 到 100 之间的数字多(在浮点架构中)。此外,0 到 1 的表示在数学上更合理,因为 1 是乘法恒等式,其方式与 100% 相同。
    • 哎呀,刚刚意识到问题是要求 C++ 而不是 C#。我可以在 C++ 中找到的随机函数真的很难看,它包含一个除法,我不想参与其中。 en.cppreference.com/w/cpp/numeric/random/…如果有人想更改此答案以使其适合 C++ 语言,欢迎这样做。
    • 所以问题是生成随机数,你得到红色的概率是 30%,蓝色为 20%,绿色为 50%,这只是基本的 if 语句,但我无法弄清楚数学条件
    【解决方案2】:

    如果你有 [1-100] 范围内的随机数,那么逻辑将是

    if (num <= 30) return "red"; // covers [1-30]
    if (num <= 30+20) return "blue"; // covers [31-50]
    return "green"; // covers [51-100]
    

    【讨论】:

    • 更像是 30
    • @TrươngQuốcAnhDuy 不,首先如果返回,我们不需要在第二种情况下进行两次比较
    猜你喜欢
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多