Проверка, является ли матрица латинским квадратом - C (СИ) (72999)
Формулировка задачи:
Какие проверки нужно сделать чтобы выяснить является ли массив размером nxn латинским квадратом?помогите пожалуйста
Решение задачи: «Проверка, является ли матрица латинским квадратом»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#define N 5
int main(int argc, char* argv[])
{
int M[N][N] = { { 3, 2, 1, 7, 4 },
{ 6, 4, 3, 8, 5 },
{ 1, 3, 8, 5, 6 },
{ 9, 1, 5, 4, 3 },
{ 7, 6, 4, 9, 2 } };
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
printf("%d ", M[i][j]);
printf("\n");
}
printf("\n");
bool result = false;
for (int i = 0; i < N && !result; i++)
for (int j = 0; j < N && !result; j++)
{
int count = 0;
for (int n = 0; n < N; n++)
if (M[n][j] == M[i][j] && n != i)
count++;
if (count > 0)
{
result = true;
continue;
}
count = 0;
for (int k = 0; k < N; k++)
if (M[i][k] == M[i][j] && k != j)
count++;
if (count > 0) result = true;
}
printf("Matrix is latin quadrant: %s", (result == false) ? "YES" : "NO");
_getch();
return 0;
}
Объяснение кода листинга программы
- Объявлена матрица M размером NxN (латинский квадрат)
- Выводится содержимое матрицы M
- Инициализируется переменная result со значением false
- Внутренний цикл проверяет, является ли элемент матрицы M[i][j] присутствующим в строке i, при этом он не должен быть равен i
- Если элемент найден, счетчик count увеличивается на единицу
- Если count больше нуля, то переменная result устанавливается в true и выполняется переход к следующей итерации внешнего цикла
- Внутренний цикл проверяет, является ли элемент матрицы M[i][j] присутствующим в столбце j, при этом он не должен быть равен j
- Если элемент найден, счетчик count увеличивается на единицу
- Если count больше нуля, то переменная result устанавливается в true и выполняется переход к следующей итерации внешнего цикла
- Выводится сообщение о том, является ли матрица латинским квадратом (да/нет)