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