Магический квадрат. Написать функцию проверки магического квадрата на правильность - C (СИ)
Формулировка задачи:
Создание магического квадрата, если сумма элементов во всех строках, столбцах и диагоналей то же самое. Напишите функцию int is_magic (int **a, Int n), который определяет, является ли магический квадрат правильным. Аргумент содержит квадратную размер n. Размеры n площади составляет 20. Функция возвращает 1, если магический квадрат
Здесь вроде все работает, толь нужно немного исправить код
Заранее спасибо!!!
а
, в противном случае возвращает 0. Пример магического квадрата:8 1 6 3 5 7 4 9 2
Вот что я написал....| C |
Решение задачи: «Магический квадрат. Написать функцию проверки магического квадрата на правильность»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int is_magic(int **a, int n)
{
int i, j, orig = 0, summ = 0;
for (i = 0; i < n; i++) orig += a[i][i];
for (i = 0; i < n; i++) summ += a[i][n-1-i];
if (orig != summ) return 0;
for (i = 0; i < n; i++)
{
summ = 0;
for (j = 0; j < n; j++) summ += a[i][j];
if (orig != summ) return 0;
}
for (i = 0; i < n; i++)
{
summ = 0;
for (j = 0; j < n; j++) summ += a[j][i];
if (orig != summ) return 0;
}
return 1;
}
int main(int argc, char **argv)
{
int i, j, **s;
s = (int**)malloc(3 * sizeof(int*));
for (i = 0; i < 3; i++)
s[i] = (int*)malloc(3 * sizeof(int));
s[0][0] = 8; s[0][1] = 1; s[0][2] = 6;
s[1][0] = 3; s[1][1] = 5; s[1][2] = 7;
s[2][0] = 4; s[2][1] = 9; s[2][2] = 2;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", s[i][j]);
printf("\n");
}
printf("Res: %i", is_magic(s, 3));
return 0;
}
Объяснение кода листинга программы
- В функции
is_magicиспользуются две вложенные циклы для суммирования элементов каждого подмассива. - Первая вложенная итерация суммирует элементы главной диагонали массива.
- Вторая вложенная итерация суммирует элементы побочной диагонали массива.
- Третья вложенная итерация проверяет равенство сумм главной и побочной диагоналей.
- Если суммы не равны, функция возвращает
0, иначе продолжает дальнейшую проверку. - Четвертая и пятая вложенные итерации проверяют суммарное значение каждого подмассива на равенство сумме элементов главного массива.
- Если найдены неравные суммы, функция возвращает
0. - Если все суммы равны, функция возвращает
1. - В функции
mainобъявлен двумерный массивsразмером 3x3. - Элементы массива
sинициализированы значениями 8, 1, 6; 3, 5, 7; 4, 9, 2. - С помощью вложенных циклов элементы массива выводятся на экран.
- Вызывается функция
is_magicдля проверки правильности массиваsразмером 3x3. - Результат проверки выводится на экран.
- Программа возвращает
0в конце работы.