Как проверить, что все случайные элементы массива разные - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь передать случайные целые числа (от 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 голосов
/ 09 мая 2018

Что я понял из вашего вопроса, что вы пытаетесь читать случайные числа, пока все 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;
    }
0 голосов
/ 09 мая 2018

Просто используйте std::vector, std::iota и std::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

и вам не нужно проверять, что все элементы уникальны

...