Массив со строками неповторяющихся чисел от 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;
    
    }     
}

Объяснение кода листинга программы

В этом коде:

  1. Создается массив arrTmp размером 8, заполненный нулями.
  2. В цикле for перебираются индексы от 0 до 7.
  3. Внутри цикла for создается переменная tmp типа int, которая инициализируется случайным числом от 0 до 7 с помощью функции rand().
  4. Далее, в цикле do-while, проверяется, что элемент массива arrTmp с индексом tmp равен текущему значению переменной k. Если это так, то генерация случайного числа повторяется.
  5. Если элемент массива arrTmp с индексом tmp не равен текущему значению переменной k, то в этот элемент записывается текущее значение переменной k.
  6. Затем, в массив Population записывается значение tmp+1.
  7. По завершении цикла for выводится сообщение. Таким образом, в результате выполнения этого кода, в массиве Population будут храниться строки, состоящие из неповторяющихся чисел от 1 до 8, заполненные случайным образом.

Оцени полезность:

14   голосов , оценка 4.357 из 5
Похожие ответы