我有一个充满值的数组,该数组不能包含任何重复值。对于任何重复值,将值加1。这是我到目前为止的代码,但我仍然得到重复。 (randArray是值所在的位置)。
for (int i = 0; i < sizeof(randArray) - 1; i++) {
for (int j = sizeof(randArray); j == 0; j--) {
if (randArray[i] == randArray[j]) {
randArray[i] == randArray[i] + 1;
}
}
}
答案 0 :(得分:2)
增加副本时出现拼写错误:
randArray[i] = randArray[i] + 1; // not ==
此外,增量可能会创建另一个副本。如果它是随后出现的项目则没有问题。但由于数组未排序,您可能无法捕获已传递的值的新副本。
因此您可能需要多次通过:
bool wasaninc;
do {
wasaninc=false;
for ...
for ...
... // if there is an increment, set wasaninc to true
} while (wasaninc);
答案 1 :(得分:0)
Change randArray[i] == randArray[i] + 1; to randArray[i] = randArray[i] + 1;
for (int i = 0; i < sizeof(randArray) - 1; i++) {
for (int j = sizeof(randArray); j == 0; j--) {
if (randArray[i] == randArray[j]) {
randArray[i] = randArray[i] + 1;
}
}
}
答案 2 :(得分:0)
您的问题归因于sizeof(randArray)
。此方法不返回数组中的元素数。
例如:
int array[5] = { 1, 2, 3, 4, 5};
sizeof(array); // -> returns 20, because of 5 * 4 bytes (integer = 4 bytes)
您应该实际使用数组中的元素数,而不是使用此方法。您已经在开头声明了数组的大小。所以很清楚数组中有多少个元素。
正确的例子:
int array[100] = {...};
for (int i = 0; i < 99; i++) {
for (int j = 0; j < 99; j++) {
if (array[i] == array[j]) {
// code for duplicates
}
}
}
答案 3 :(得分:0)
#include <iostream>
#include <unistd.h>
#include <algorithm>
using namespace std;
int main()
{
int arr[8]={0,1,1};
int n = sizeof(arr) / sizeof(arr[0]);
cout<<n<<"\n";
/*Here we take two parameters, the beginning of the
array and the length n upto which we want the array to
be sorted*/
//sort(arr, arr + n);
for (int i=0;i<=n;i++){
cout<<arr[i]<<" ";
}
int result=0;
do{
for (int i=0;i<=n;i++){
for (int j =0;j<i;j++){
if(arr[j]==arr[i]){
srand(time(NULL)); // Seed the time
int finalNum = rand()%((10-1)+1); // Generate the number, assign to variable.
arr[i] = finalNum;
result = result + 1;
sleep(1);
i--;
}
}
}
}
while(result<=2);
n = sizeof(arr) / sizeof(arr[0]);
/*Here we take two parameters, the beginning of the
array and the length n upto which we want the array to
be sorted*/
//sort(arr, arr + n);
cout<<"\n";
for (int i=0;i<=n;i++){
cout<<arr[i]<<" ";
}
return 0;
}
答案 4 :(得分:-1)
(我假设Window
是C风格的数组。) sizeof(randArray)
不返回元素数量在数组中,它返回window.opener.location
占用的字节数。
示例(on wandbox):
randArray
在现代C ++中使用数组的正确方法是使用std::array
或std::vector
。它们都提供了一个randArray
方法,用于返回集合中元素的数量。
由于以下原因,您的代码失败了:
int main()
{
int arr[] = {1, 2, 3, 4};
// Prints 16! (on my machine)
std::cout << sizeof(arr) << "\n";
}
不会返回数组中元素的数量。
将重复元素递增1并不能保证它是唯一的。