pul

Capitan
Регистрация
16 Июн 2013
Сообщения
72
Репутация
0
Спасибо
0
Монет
0
Код который пишет массив из 10 случайных чисел которые не повторяются.

Код не работает, что не так? #include

#include

using namespace std;



void randarr(int arr[], int size); void coutarr(int arr[], int size);





void main()

{

srand(time(NULL));

int const SIZE = 10;

int arr[SIZE];

randarr(arr, SIZE);

coutarr(arr, SIZE);

}



void randarr(int arr[], int size)

{

for (int i = 0; i < size; i++)

{

arr = rand() % 10;

}



bool same;

for (int i = 0; i < size; )

{

same = false;

for (int c = 0; c < size; c++)

{

if (arr == arr[c])

{

same = true;

}

}

if (same)

{

arr = rand() % 10;

}

if (!same)

{

i++;

}

}

}



void coutarr(int arr[], int size)

{

for (int i = 0; i < size; i++)

{

cout
 
#include &lt;iostream&gt;
#include &lt;numeric&gt;
#include &lt;random&gt;
#include &lt;algorithm&gt;
using namespace std;
int main(){
const int n=10; int a[n]; iota(a,a+n,0);
random_device rd; mt19937 g(rd());
shuffle(a,a+n,g); for(int &amp;i:a)cout&lt;&lt;i&lt;&lt;&#39; &#39;;}
 
В данном коде в функции randarr есть ошибка в условии вложенного цикла. Когда i и c равны, сравнение if (arr == arr[c]) всегда будет истинным, что приводит к тому, что значение элемента массива перезаписывается случайным числом. Это может привести к тому, что в массиве будут повторяющиеся числа.

Чтобы исправить эту ошибку, можно изменить условие сравнения на if (arr == arr[c] &amp;&amp; i != c), чтобы исключить случай, когда i и c равны.

Исправленный код будет выглядеть так: #include
#include

using namespace std;

void randarr(int arr[], int size);
void coutarr(int arr[], int size);

int main()
{
srand(time(NULL));
const int SIZE = 10;
int arr[SIZE];
randarr(arr, SIZE);
coutarr(arr, SIZE);
return 0;
}

void randarr(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
arr = rand() % 10;
}

bool same;
for (int i = 0; i < size;)
{
same = false;
for (int c = 0; c < size; c++)
{
if (arr == arr[c] && i != c) //исправление
{
same = true;
}
}
if (same)
{
arr = rand() % 10;
}
if (!same)
{
i++;
}
}
}

void coutarr(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
cout
 
#include
#include
#include

using namespace std;

void randarr(vector &arr) {
for (int i = 0; i < arr.size(); ++i) { arr = i; }
random_shuffle(arr.begin(), arr.end());
}

void coutarr(vector arr) {
for(auto v: arr) { cout
 
Назад
Сверху