首页 > 解决方案 > 如何检查所有随机数组元素是否不同

问题描述

我正在尝试将随机整数(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;
}

哈!

标签: c++arraysrandom

解决方案


只需使用std::vector,std::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

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


推荐阅读