如何检查随机数组中的重复项?

时间:2015-03-21 18:25:01

标签: c++ arrays random

我有一个包含4个数字的数组,但我无法检查重复数据。我的印象是,如果我为arr [i]随机化数字,那么对于arr [j],我可以将它们与重复项进行比较,如果为真则再次随机化。如何检查数组元素是否重复/重复?

int arr[4];
srand(time(0));

for(int i=0; i<4; i++)
{
    arr[i] = rand() % 10;
    for(int j=i+1; j<4; j++)
    {
        arr[j] = rand() % 10;
        if(arr[j] == arr[i])
        {
            arr[i] = rand() % 10;
        }
    }
}

for(int i=0; i<4; i++)
cout << arr[i] << endl;  

4 个答案:

答案 0 :(得分:0)

它不起作用,因为你正在检查当前索引i之上的数组内容,这些内容甚至尚未编写,你需要检查索引i下面的内容以找到你尚未存储的新值

您的代码的第二个问题是,如果它已经存在,它只能生成一个新的随机数。该程序从不检查第二个替代随机数是否也已存在。

这应该是正确的:

for (int i=0; i<4; i++)
{
    boolean exists = true;
    while (exists) {
        exists = false;
        arr[i] = rand() % 10;

        for (int j=0; j<i && !exists; j++)
            if (arr[j] == arr[i])
                exists = true;
    }
}

答案 1 :(得分:0)

您可以使用此方法。当j = i + 1直到j <4时,你正在使用循环,而如果i的值小于j,那么循环是没有用的。

for (int i = 0; i<4; i++)
    {
        arr[i] = rand() % 10;
        if (i == 0)
        {
            continue;
        }

        for(j=0,j<i-1;j++)
      {
        if (arr[j] == arr[i])
        {
            arr[i] = rand() % 10;
        }

      }
    }

答案 2 :(得分:0)

这是一个示范程序

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() 
{
    const size_t N = 4;
    int arr[N];

    std::srand( std::time( nullptr ) );

    for ( size_t i = 0; i < N; i++ )
    {
        size_t j;
        do
        {
            arr[i] = std::rand() % 10;

            j = 0;
            while ( j < i && arr[j] != arr[i] ) j++;
        } while ( j != i );
    }

    for ( int x : arr ) std::cout << x << ' ';
    std::cout << std::endl;
}

程序输出可能看起来像

5 9 6 7

答案 3 :(得分:0)

避免同时使用goto的另一个技巧是在检查重复时反转i for(int j=0; j < i ; j++) if (arr[j] == arr[i]) i--

#include <iostream>
#include <ctime>
using namespace std;



int main(void)
{
      const int size=100 ;
      int  arr[100] ;
      int i=0;

      srand(time(0));

      for ( i=0;i<size;i++)   {
          arr[i]=rand() % size;
          for(int j=0; j < i ; j++)  if (arr[j] == arr[i]) i--; 
      }
       cout<<"   \n\n\n ";


      // Loop to display the array arr[ ]
      for (  i=0;i<size;i++) cout<<""<<arr[i]<<"\t";

      cout<<" \nPress any key to continue\n";
      cin.ignore();
      cin.get();

  return 0;
}

输出:

 91     71      14      65      12      25      64      98      83      28
99      9       5       0       89      36      95      55      73      90
78      2       52      70      39      63      17      50      7       58
34      84      40      51      20      31      38      32      35      49
61      66      72      92      6       59      41      13      22      23
81      56      1       16      21      62      57      10      11      54
77      86      76      93      4       96      8       33      94      67
29      48      15      82      97      37      26      46      43      80
68      85      60      30      42      53      18      69      45      88
47      79      75      44      24      27      74      3       19      87

Press any key to continue