Массив со строками неповторяющихся чисел от 1 до 8, заполненный случайным образом - C (СИ)
Формулировка задачи:
Всем доброго времени суток! Прошу указать мне на ошибку. Стою на месте, не могу никак сдвинуться. Нужно, чтобы в каждой строке случайным образом были расставлены числа от 1 до 8. И самое главное, чтобы они не повторялись.
int main()
{
srand(time_t(NULL));
int N = 8;
int **Population = new int*[N];
for (int i = 0; i<N; i++) Population[i] = new int[N];
int q = 0;
bool flag;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
q = rand() % N;
flag = 1;
for (int b = 0; b < j; b++) {
if (Population[b][i] == q)
flag = 0;
if (flag)
Population[j][i] = q;
else j--;
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << Population[i][j] << ' ';
}
cout << "\n";
}
for (int i = 0; i<N; i++) delete[]Population[i];
delete[]Population;
return 0;
}Решение задачи: «Массив со строками неповторяющихся чисел от 1 до 8, заполненный случайным образом»
textual
Листинг программы
int arrTmp[8]={0};
for(int i=0;k=1; i<8;i++,k++)
{
for(j=0;j<8;j++)
{
int tmp;
do{
tmp=rand()%8;
} while(arrTmp[tmp]==k);
arrTmp[tmp]=k;
Population[i][j]=tmp+1;
}
}
Объяснение кода листинга программы
В этом коде:
- Создается массив
arrTmpразмером 8, заполненный нулями. - В цикле
forперебираются индексы от 0 до 7. - Внутри цикла
forсоздается переменнаяtmpтипаint, которая инициализируется случайным числом от 0 до 7 с помощью функцииrand(). - Далее, в цикле
do-while, проверяется, что элемент массиваarrTmpс индексомtmpравен текущему значению переменнойk. Если это так, то генерация случайного числа повторяется. - Если элемент массива
arrTmpс индексомtmpне равен текущему значению переменнойk, то в этот элемент записывается текущее значение переменнойk. - Затем, в массив
Populationзаписывается значениеtmp+1. - По завершении цикла
forвыводится сообщение. Таким образом, в результате выполнения этого кода, в массивеPopulationбудут храниться строки, состоящие из неповторяющихся чисел от 1 до 8, заполненные случайным образом.