A
Alex430
Есть cnt_0 - число элементов массива, которые подлежат обнулению. p[j] - массив, сформированный динамически с рахмерами n на m и забит рандомными числами от 0 до 9.
Данный код обнуляет приближенное к cnt_0 число значений массива p. (Приближенное т.к. возможны повторения случайных i и j) Обнуление без ошибок происходит при размерах матрицы до 100 на 100 элементов, иногда выполняется и при немного больших размерах матрицы.
Код ниже, обнуляет cnt_0-1 элементов матрицы при ее небольших размерах.
Не могу понять, в чем проблема с обнулением большого числа элементов...
Данный код обнуляет приближенное к cnt_0 число значений массива p. (Приближенное т.к. возможны повторения случайных i и j) Обнуление без ошибок происходит при размерах матрицы до 100 на 100 элементов, иногда выполняется и при немного больших размерах матрицы.
C++:
srand((unsigned)(time(NULL)));
for(double k=0; k<=cnt_0; k++) //зануление
{
i=int((double)rand()/RAND_MAX*n);
j=int((double)rand()/RAND_MAX*m);
p[i][j]=0;
}
C++:
pair <int, int> pr;
vector <pair<int,int>> v_pr;
vector <pair<int, int>>::iterator v_it;
for(double k=0; k<cnt_0; k++)
{
if(b) //первый проход с обнулением, вектор пар пока пуст
{
i=int((double)rand()/RAND_MAX*n);
j=int((double)rand()/RAND_MAX*m);
pr.first = i;
pr.second = j;
v_pr.push_back(pr);
p[i][j]=0;
b=!b;
}
else //последующие проходы с генерацией новых уникальных координат для обнуления
{
i=int((double)rand()/RAND_MAX*n);
j=int((double)rand()/RAND_MAX*m);
for(v_it=v_pr.begin(); v_it!=v_pr.end(); v_it++)
{
if(v_it->first==i && v_it->second==j)
{
i=int((double)rand()/RAND_MAX*n);
j=int((double)rand()/RAND_MAX*m);
v_it = v_pr.begin();
}
}
pr.first = i;
pr.second = j;
v_pr.push_back(pr);
p[i][j]=0;
}
}