C/C++

Помогите пожалуйста с 2меррый Матрицами .В языке С

Выпуск 7. Латинский квадрат
Латинский квадрат NxN представляет собой квадратную матрицу, каждая строка и столбец которой равны 1
содержит все числа от N до N. Латинский квадрат
напишите программу поиска. Данные квадратной матрицы NxN в файле
расположен.
Если матрица, считываемая из файла, является производным квадратом, программа да, в противном случае
Он должен выдать NO.
Примечание: все данные должны быть введены пользователем и
пример, обработанный без алгоритма, получает низкий балл.
Input (информация в файле)
Выход (Исходящий
информация)

Да
2 3 4 1
3 4 1 2
4 1 2 3
1 2 3 4
нет
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
Я так и не понял, что должно выдавать:
Да/Нет или Да/нет или Да/NO или YES/NO
определитесь с этим и замените соответствующие строки внизу программы.

 #include 
#include
#include

//setup
FILE *input = NULL, *output = NULL;
const char* file_name_input = "input.txt"; //имя файла

void abort_file(const char* message)
{
printf("Ошибка открытия файла %s", message);
if (input) fclose(input);
if (output) fclose(output);
exit(1);
}

int main()
{
input = fopen(file_name_input, "r");
if (!input) abort_file(file_name_input);
unsigned long long count = 0,N; int val;
do {
fscanf(input, "%d", &val);
++count;
} while (!feof(input)); //подсчет кол-ва элементов
N = sqrt(count); //подсчет размера матрицы
int* columns = (int*)malloc(sizeof(int) * N); //640 кБ хватит всем надеюсь?
int ret_urn = 1; //результат
for (int i = 0; i < N; ++i) columns[i] = (1 + N) * N / 2; //сумма арифм прогрессии
clearerr(input);
rewind(input); //сброс на начало файла
for (int i = 0; i < N; ++i) //цикл проверки столбцов
{
int sum_str = (1 + N) * N / 2;
for (int i = 0; i < N; ++i) //цикл проверки строк
{
fscanf(input, "%d", &val);
columns[i] -= val; //вычитаем значение из соответсвующего столбца
sum_str -= val; //вычитаем значение из текущей строки
}
if (sum_str) //если в строке не нуль - значит строка не правильная
{
ret_urn = 0; break;
}
}
//далее проверка столбцов, если в каком-то ненулевое значение, значит столбец не правильный
if (ret_urn) for (int i = 0; i < N; ++i) if (columns[i]) { ret_urn = 0; break; }
if (ret_urn) printf("YES"); else printf("NO"); //замените сообщения в кавычках на те что требуется если чё
fclose(input);
}
Дмитрий Пономарёв
Дмитрий Пономарёв
51 416
Лучший ответ