Как сделать так чтобы элементы двумерного массива не повторялись?

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define M 5
#define N 4

 int main() 
 {
   int mass[M][N];
   int i, j;
   int* p1 = (int*)mass;
   int nel = sizeof(mass) / sizeof(int);
   int(*prow)[N];
        system("chcp 1251");
         srand(time(NULL));
         int* max = &mass[0][0];
    
printf("Розмірність [%d*%d]\n", M, N);
printf("Елементи матриці:\n");
for (; p1 < (int*)mass + nel; p1++)
{
    *p1 = rand() % 101;

    if (*max < *p1)
        *max = *p1; 
}

for (prow = mass; prow < mass + M; prow++) {
    for (j = 0; j < N; j++)
        printf("%4d", *(*prow + j)); 
    printf("\n");
}
printf("\n Максимальний елемент-%d", *max);


int min = mass[0][0];
for (i = 0; i < M; i++)
{
    for (j = 0; j < N; j++)
        if (min > mass[i][j])
            min = mass[i][j];
}
printf("\n Мінімальний елемент-%d\n", min);
return 0;

}

Используя стандартные библиотечные функции генерирования случайных цифр, заполнить случайными двузначного числа матрицу размерности M x N.Обеспечить,чтобы в каждой строке матрицы элементы имели разные значения. Отдельно отметить наибольший и наименьший среди с генерированных элементов.


Ответы (1 шт):

Автор решения: AlexGlebe

Генерация чисел, чтобы в строке были все разные. Создаёте "список" чисел и из них "выбираете" случайные.

// gcc -Wall -Wextra -Wpedantic -std=c11 massdiff.c -o massdiff
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
# define M 20
# define N 20
int main(){
int mass[M][N];
    for(int r = 0;r<M;++r) {
      // генерируем массив [ 0 1 .. 98 99 ]
      int numbers [100];
      for(int d=0;d<100;++d)
        numbers[d]=d;
      for(int c = 0;c<N;++c) {
        // выбираем случайное число из "списка" оставшихся
        int ra = rand() % (100 - c) ;
        mass[r][c] = numbers[ra] ;
        // убираем и списка отработанное число
        // и ставим на его место другое
        numbers[ra]  = numbers[99-c]; } }

    for(int r = 0;r<M;++r) {
      for(int c = 0;c<N;++c) {
        printf("%d " , mass[r][c]);
      }
      printf("\n");}
}
→ Ссылка