C++ 所有可能的强力球号码

C++ 所有可能的强力球号码,c++,C++,代码不需要在一个控制台行或文本文件中重复Powerball编号。我认为它在if语句中的某个地方。前五个数字是白色的球,输出行中的结束数字在制表符之后。 12359591 #include <iostream> #include <fstream> using namespace std; void main() { ofstream out_stream; out_stream.open("powerball.txt"); // text file

代码不需要在一个控制台行或文本文件中重复Powerball编号。我认为它在if语句中的某个地方。前五个数字是白色的球,输出行中的结束数字在制表符之后。 12359591

#include <iostream>
#include <fstream>
using namespace std;

void main()
{
    ofstream out_stream;
    out_stream.open("powerball.txt"); // text file
    for (int i = 1; i <= 59; i++)
    {
        for (int j = 1; j <= 59; j++) // loop and if statements for powerball repeat check
        {
            if (j == i)
            {
                j = i + 1;
            }
            if (j == 60)
            {
                j = j - 1;
            }
            for (int k = 1; k <= 59; k++) // loop and if statements with powerball repeat check
            {
                if (k == i)
                {
                    k = k + 1;
                    if (k == j)
                    {
                        k = k + 1;
                    }
                }
                if (k == 60)
                {
                    k = k - 1;
                }
                for (int l = 1; l <= 59; l++) // loop and if statements with powerball repeat check
                {
                    if (l == i)
                    {
                        l = l + 1;
                        if (l == j)
                        {
                            l = l + 1;
                            if (l == k)
                            {
                                l = l + 1;
                            }
                        }
                    }
                    if (l == 60)
                    {
                        l = l - 1;
                    }
                    for (int m = 1; m <= 59; m++) // loop and if statements for powerball repeat check
                    {
                            if (m == i)
                            {
                                m = m + 1;
                                if (m == j)
                                {
                                    m = m + 1;
                                    if (m == k)
                                    {
                                        m = m + 1;
                                        if (m == l)
                                        {
                                            m = m + 1;
                                        }
                                    }
                                }
                            }
                        if (m == 60)
                        {
                            m = m - 1;
                        }
                        for (int n = 1; n <= 35; n++) // red ball and output count
                            {
                                out_stream << i << " " << j << " " << k << " " << l << " " << m << "\t" << n << "\n";
                                cout << i << " " << j << " " << k << " " << l << " " << m << "\t" << n << "\n";
                            }
                        }
                    }
                }
            }
        }
    }

正如Ben所说,if语句在存在重复项时添加1是不起作用的。首先,每个if语句需要检查之前的所有变量,以确保没有重叠。 例如,m循环中的if语句如下所示:

if(m==l || m==k || m==j || m==i){
    m++;
}
while(m==l || m==k || m==j || m==i){
    m++;
}
然而,只有当没有连续的数字时,如k=1,j=2,这才能解决问题。您需要使用while循环来修复此问题,并按如下方式进行声明:

if(m==l || m==k || m==j || m==i){
    m++;
}
while(m==l || m==k || m==j || m==i){
    m++;
}
总之,要列出所有的可能性,您的程序将是 包括 包括 使用名称空间std

void main()
{
    ofstream out_stream;
    out_stream.open("powerball.txt"); // text file
    for(int i=1; i<=59; i++){
        for(int j=1; j<=59; j++){
            while(j==i){
                j++;
            }
            if(j>59) break;
            for(int k=1; k<=59; k++){
                while(k==j || k==i){
                    k++;
                }
                if(k>59) break;
                for(int l=1; l<=59; l++){
                    while(l==k || l==j || l==i){
                        l++;
                    }
                    if(l>59) break;
                    for(int m=1; m<=59; m++){
                        while(m==l || m==k || m==j || m==i){
                            m++;
                        }
                        if(m>59) break;
                        for (int n = 1; n <= 35; n++) // red ball and output count
                            {
                                out_stream << i << " " << j << " " << k << " " << l << " " << m << "\t" << n << "\n";
                                cout << i << " " << j << " " << k << " " << l << " " << m << "\t" << n << "\n";
                            }
                        }
                    }
                }
            }
        }
    }
根据您的需要,更好的解决方案是随机选择5个数字一次,除非您需要列出所有数字

编辑:
确保您有足够的磁盘空间来运行此操作,它将生成一个352GB的文件,文件中充满数字。

只需使用所有随机数字-获得重复数字序列的几率与赢得头奖的几率相同,非常小。@Mark:他担心的是序列中的重复数字,而不是整个序列的重复。另外,生日问题说,重复序列的几率并不是很小,因为你有N-choose-2对。@J.p:你的修正是,每当RNG选择一个重复序列时,就加上1。首先,它极大地增加了获得相邻号码的机会。第二,你没有修正重复59,因为你加一等于60非法,再减去一等于59。你忘了问问题。按钮的标签是“出于某种原因问问题”。谢谢,我会做更多的研究。除了嵌套循环,还有其他方法吗?或者,当相同的数字出现时,您可以使用continue而不是increment,这样您就不需要一整串if m>59的换行符。