Top.Mail.Ru
Ответы

Помогите пожалуйста с 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
определитесь с этим и замените соответствующие строки внизу программы.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
 #include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
 
//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); 
}