c++ - 彩票中奖概率 C++

标签 c++

我有一项作业要求我们用 C++ 编写一个程序,该程序从用户那里获取彩票号码数量和彩票抽奖号码数量的输入。然后它应该计算用户得到正确数字的几率。这是(或多或少)我用 C++ 编写的第一个程序,所以我对此很陌生。到目前为止,我所拥有的如下。我正在寻求有关使该程序正常运行的帮助。我可以为声明的变量获取值,但无法弄清楚如何写下我实际需要做的事情——这是一个阶乘函数。我知道这个函数,只是不知道如何在 C++ 中

据我目前的理解,它应该看起来像这样:

for (int i = 1; i <= k; i++) { 结果 = (结果 * (n+1-i))/i;

或类似的东西?....至少这是我在过去几个小时在线搜索答案时遇到的情况。我想我快要搞清楚了,但我遇到了障碍。

我不希望有人直接告诉我答案。如果您能向我解释我做错了什么以及我可以做些什么来解决它,那将对我最有帮助。

#include <iostream>
#include <iomanip>

using namespace std;


int main (int argc, char** argv)
{
    int n, k;
    int odds;

    cout<< "How many numbers are printed on the lottery ticket? ";
    cin >> n ;  

    cout<<"How may numbers are selected in the lottery drawing? "; 
    cin >> k ;

    cout << "You entered " << n << " for how many numbers are printed on the lottery ticket, and " 

    << k << " for how many numbers are selected in the lottery drawing." << endl;

    for (int i = 1; i <= k; i++)
    {
        odds = (n * (n-k++))/k;

        cout << odds;    
        }
        return 0;
    }   

当我运行它时,我只会得到无穷无尽的“3-3-3-3 ....”。这是马不停蹄的。有一次我得到一个数字作为输出(一个非常大的错误数字),但是当我修改它时我无法取回它。

如有任何指导,我们将不胜感激。

最佳答案

这对于第一次作业来说似乎有点困难,除非你已经完成了计算机科学类(class)的大部分类(class)并且只是 C++ 的新手。

赔率公式通常被称为“组合数”,通常以阶乘形式表示。但是您不能在计算机上有效地操纵这些阶乘;它们对于任何内置数据类型来说都太大了。

相反,重要的是取消分子和分母中的相似项。交叉乘法和除法可以提供更多帮助。

我之前在另一个问题上发布了组合数量的工作代码:

您当前的代码实际上确实很好地交错了一些东西,但是您根本没有注意 ikn< 的含义,并且在序列点之间读取和写入变量时,您还会遇到未定义的行为。

具体来说,这是非法的,因为分母中的 k 是不稳定的,因为它正在递增:

odds = n*(n-k++)/k;

您根本不应该在此处更改 k。从1k的值是i。所以这变成了:

odds = n * (n-i) / i;

您需要在循环迭代中累积所有项,因此您应该乘以之前的 odds 值:

odds = odds * (n - i) / i;

但是您确实需要在分子中使用 n - 0,但在分母中不需要 0。你被选中使 i 以一为基础,你就是需要调整的分子:

odds = odds * (n + 1 - i) / i;

现在您的代码与我的非常接近。根据您的 nk 值,您可能仍会溢出。将 odds 的数据类型更改为 long longdouble 应该会有所帮助。

关于c++ - 彩票中奖概率 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25790863/

相关文章:

c++ - C++ 中的字符串到长数组

c++ - Turbo C++ 和 Dev-C++ 中 C 和 C++ 语言的标识符的最大长度

c++ - 以下reinterpret_cast是否会导致未定义的行为?

c++ - 将 char * 转换为字符串文字

c++ - 为什么将左值作为右值参数传递失败?

c++ - directx 9 与 Visual Studio 2012 Express

c++ - Q按钮 : Two different Font size

c++ - 特定成员的模板特化?

C++ 对多个类使用相同的 ADT 结构

c++ - 获取命令行选项