如何检查所有随机数组元素是否不同

时间:2018-05-09 14:57:37

标签: c++ arrays random

我试图将随机整数(0到11之间)传递给Numbers []数组,但我必须确保它的所有10个元素都不同。我试图在数组中首先传递数字,然后检查是否有任何相同的数字但是它不能以这种方式工作。这是我的代码:

#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;

int main()
{
    int Numbers[10];
    srand( time(NULL) );

    for (int i = 0; i < 10; i++ )
    {
        Numbers[i] = rand() % 12;         // First, the integers are passed 
        to the array (They must be between 0 and 11)
        cout << Numbers[i] << endl;        // and printed to the screen
    }

    cout << endl << endl;

    for (int u = 0; u < 10; u++)
    {
        if(Numbers[u] == Numbers[u - 1])      // If there are two equal 
numbers 
     {
       switch (Numbers[u])     // One of them is incremented (But that 
    causes problems as well because it can lead to another pair of equals)
       {
       case 11:     // In case one of them is 11
        Numbers[u]--;
        break;

       default:
        Numbers[u]++;
        break;

       }
     }
     cout << Numbers[u] << endl;
    }

    return 0;
}

HALP!

2 个答案:

答案 0 :(得分:2)

只需使用std::vectorstd::iotastd::shuffle

std::vector<int> v( 12 );
std::iota( v.begin(), v.end(), 0 ); // initialize with values 0..11
std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});  // make em random
v.resize( 10 ); // remove extra elements

并且您无需验证所有元素都是唯一的

答案 1 :(得分:0)

我从你的问题中了解到你试图读取随机数,直到所有10个数字都不同。看看下面的代码:

    #include <iostream>
    #include <time.h>
    #include <stdlib.h>
    #include <bitset>
    using namespace std;

    int main()
    {

        int Numbers[10] ;
        srand(time(NULL));

        //Keep flag with all the bits '0' initially
        bitset<12> flags;
        flags.reset();

        // keep taking input till all bits are not '1'
        int i = 0;
        do
        {
            int in_num = rand() % 12;
            // check if the bit at position "in_num" is 0
            if (!flags[in_num])
            {
                Numbers[i++] = in_num;
                flags.set(in_num);// set the bit 1
            }

        } while (i < 10);
        for (int u = 0; u < 10; u++)
        {
            cout << endl << Numbers[u];
        }
        return 0;
    }