Я написал программу для проверки того, является ли квадрат n*n
матрица «идеальной», то есть каждая строка и строка содержат ровно один экземпляр каждого числа от 1 до n
.
Я также написал Основная функция для выделения памяти для заданного размера и получения значений этой матрицы от пользователя.
Кажется, что это работает нормально, за исключением случаев, когда я выбрал 4 для размера и введите эту матрицу: {{1,2,3,4},{2,1,4,3},{3,4,2,1),{4,3,1,2}}
.
Я получаю матрицу {{1,2,3,4},{2,**3**,4,3},{3,4,**3**,1},{4,3,1,2}}
.
Это похоже на входные данные, но я могу t find what
неправильно: (
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int IsPerfect(int *arr, int size);
void main() {
int size = 0, i = 0, j = 0, vol = 0;
printf("please enter matrix size, 0 to exit:\n");
scanf("%d", &size);
printf("size is :%d\n", size);
while (size != 0) { //loop for allocating and inputing ,matrix
int *pmatrix = (int *)malloc(size*size * sizeof(int));
printf("please input matrix:\n");
for (i = 0; i < size; i++)
for (j = 0; j < size; j++) {
printf("[%d][%d]\n", i, j);
scanf("%d", ((pmatrix + i) + j)); //storing matrix values
}
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++)
printf("[%d]", *((pmatrix + i) + j)); //printing matrix
printf("\n");
}
IsPerfect(pmatrix, size); //perfect check
free(pmatrix);
printf("please enter matrix size, 0 to exit:\n");
scanf("%d", &size);
}
printf("bye bye!\n");
}
int IsPerfect(int *arr, int size) {
int i = 0, j = 0, w = 0, perf = 1;
int *check = (int *)malloc(sizeof(int) * size);
for (w = 0; w < size; w++) { //horizontal check
for (i = 0; i < size; i++)
*(check + i) = 0;
for (i = 0; i < size; i++)
for (j = 1; j <= size; j++)
if (*((arr + w) + i) == j)
*(check + j - 1) = *(check + j - 1) + 1;
for (i = 0; i < size; i++)
if (*(check + i) == 0 || *(check + i) > 1)
perf = 0;
}
for (w = 0; w < size; w++) { //vertical check
for (i = 0; i < size; i++)
*(check + i) = 0;
for (i = 0; i < size; i++)
for (j = 1; j <= size; j++)
if (*((arr + i) + w) == j)
*(check + j - 1) = *(check + j - 1) + 1;
for (i = 0; i < size; i++)
if (*(check + i) == 0 || *(check + i) > 1)
perf = 0;
}
if (perf == 1)
printf("the matrix is perfect\n");
if (perf == 0)
printf("the matrix is not perfect\n");
free(check);
return perf;
}