没有双号

时间:2014-07-31 08:45:07

标签: c++

我正在进行强力球抽奖,其中数字将按升序排列。快速选择(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;
}

3 个答案:

答案 0 :(得分:1)

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

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);
    }
}

请注意,一旦超过quickpick set(56)的功能,就不能进行新的插入,并且你最终会得到一个无限循环(你可能想在那里添加一个检查)

答案 1 :(得分:1)

一种可能性是Fisher-Yates shuffle。在您的情况下,它看起来像这样:

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]

我已在this ideone link发布了完整的工作计划。

答案 2 :(得分:0)

从数组中随机取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