没有双数字

No Double Numbers

本文关键字:数字      更新时间:2023-10-16

我正在做一个强力球彩票,数字将按升序进行气泡排序。快速选择(QP(将在1-56之间,强力球(PB(将在1-46之间。我已经处理了那么多,但我在QP中创建限制时遇到了麻烦,所以不会有双数字。例如1、5、5、32、55。

是否可以使用if-then-else语句创建该限制

#include <iostream> 
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
int size;
int arr[5] = {0, 1, 2, 3, 4};
int i=0;
int PowerBall[1] = {0};

int QP()
{
    srand(time(NULL)); 
    for (int i=0; i<5; i++) /
    arr[i] = rand() % 56 + 1; 
    return 0;
}
int PB()
{
    srand(time(NULL)); 
    for (int i=0; i<5; i++) 
        PowerBall[i] = rand() % 56 + 1; 
    return 0;
}
void bubbleSort(int arr[], int size) //bubble sort function
{
    bool swapped = true; 
    int j = 0;
    int tmp;
    while (swapped)
    {
        swapped = false; 
        j++; 
        for (int i = 0; i < size - j; i++) { 
            if (arr[i+1] < arr[i]) { 
                tmp = arr[i]; 
                arr[i] = arr[i + 1]; 
                arr[i + 1] = tmp; 
                swapped = true; 
            }
        } 
    }
}

void print()
{
    for (int i = 0; i < 5; i++)
    cout << arr[i] << setw(8);
    cout << PowerBall[i] << endl;
}
int main()
{
    QP();
    bubbleSort(arr, 5);
    PB();
    print();
    system("pause");
    return 0;
}

将数字放在一个集合中以排除多重性(它们也会自动排序(

int newNum; 
set<int> numSet;
for (int i(0); i < 5; ++i)
{
    // calculate a number
    while (!numSet.insert(newNum).second)
    {
        // calculate another number
        numSet.insert(newNum);
    }
}

请注意,一旦您超过了快速拾取集(56(的能力,就无法进行新的插入,并且最终会出现无限循环(您可能需要在其中添加一个复选框(

一种可能性是费雪-耶茨洗牌。在你的情况下,它看起来是这样的:

int number_list[56];
for (int i = 0; i < 56; i++)
    number_list[i] = i + 1; // Initialise number_list
for (int i = 0; i < 5; i++) {
    int r = rand() % (56 - i);
    // Exchange number_list[i] and number_list[i + r]
    int t = number_list[i];
    number_list[i] = number_list[i + r];
    number_list[i + r] = t;
}

现在您只需读取number_list数组中的前五个值:number_list[0],...,number_list[4]

我已经在这个视频链接上发布了一个完整的工作程序。

从数组qp_source_arr[56]中随机取数,其中qp_source_arr[i]=i+1;

然后,当您随机选择一个索引时,j=rand%56+1 arr[i]=gp_source_arr[j];gp_source_arr[j]=-1;

在这一点之后,当你再次选择-1,直到你得到一些不是-1的东西。

我希望这能帮助你,我不会写整个代码,因为你应该实现自己的代码,这似乎是家庭作业:D