我有一个包含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;
答案 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