Магический квадрат. Написать функцию проверки магического квадрата на правильность - 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;
}

Объяснение кода листинга программы

  1. В функции is_magic используются две вложенные циклы для суммирования элементов каждого подмассива.
  2. Первая вложенная итерация суммирует элементы главной диагонали массива.
  3. Вторая вложенная итерация суммирует элементы побочной диагонали массива.
  4. Третья вложенная итерация проверяет равенство сумм главной и побочной диагоналей.
  5. Если суммы не равны, функция возвращает 0, иначе продолжает дальнейшую проверку.
  6. Четвертая и пятая вложенные итерации проверяют суммарное значение каждого подмассива на равенство сумме элементов главного массива.
  7. Если найдены неравные суммы, функция возвращает 0.
  8. Если все суммы равны, функция возвращает 1.
  9. В функции main объявлен двумерный массив s размером 3x3.
  10. Элементы массива s инициализированы значениями 8, 1, 6; 3, 5, 7; 4, 9, 2.
  11. С помощью вложенных циклов элементы массива выводятся на экран.
  12. Вызывается функция is_magic для проверки правильности массива s размером 3x3.
  13. Результат проверки выводится на экран.
  14. Программа возвращает 0 в конце работы.

Оцени полезность:

15   голосов , оценка 4.133 из 5
Похожие ответы