Определить, является ли матрица магическим квадратом - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана матрица A(n*n) целых чисел, составленная из чисел 1 , 2 , . . . n2. Определить, является ли она «магическим квадратом» (т.е. суммы по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой) помогите составить код.

Решение задачи: «Определить, является ли матрица магическим квадратом»

textual
Листинг программы
#include <stdio.h>
#define n 9
int main (void)
{
    int c, i, k;
    int a[n][n];
 
    /* заполняем массив числами, начиная с 1 */
    for (c=1, i=0; i<n; i++)
        for (k=0; k<n; k++)
            a[i][k] = c++;
 
    /* найдем суммы диагоналей */
    int s1=0, s2=0;     // суммы главной и побочной диагоналей
    c = n-1;
    for (i=0; i<n; i++)
        for (k=0; k<n; k++)
        {
            if (i == k) s1 += a[i][k];      // сумма главной
            if (i+k == c) s2 += a[i][k];    // и побочной диагоналей
        }
 
    /* если диагонали не равны, то дальше проверять нет смысла */
    if (s1 != s2) {c = 0; goto end;}
    c = 1;  // если проверка успешна, считаем что квадрат магический
 
    /* проверяем строки и столбцы */
    int s3;
    for (i=0; i<n; i++)
    {
        for (s2=s3=k=0; k<n; k++)
        {
            s2 += a[i][k];      // находим сумму в строке
            s3 += a[k][i];      // находим сумму в столбце
        }
        /* если сумма не равна диагонали, то дальше проверять нет смысла */
        if (s2 != s1 || s3 != s1) {c = 0; goto end;}
    }
 
    end:
    // if (c != 0) square is magical
    printf("Square is%s.\n", (c)? " magical" : "n't magical");
    return 0;
}

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

  1. Включаем заголовочный файл stdio.h для использования функций ввода-вывода
  2. Задаем размерность матрицы в 9 строк и 9 столбцов
  3. Инициализируем переменные c, i, k для использования в циклах
  4. Заполняем массив a[n][n] числами, начиная с 1
  5. Находим суммы диагоналей s1 и s2
  6. Проверяем равенство диагоналей s1 и s2, если они не равны, то дальнейшая проверка не имеет смысла
  7. Проверяем строки и столбцы матрицы на равенство суммы элементов соответствующей диагонали
  8. Если сумма элементов строки или столбца не равна соответствующей диагонали, то дальнейшая проверка не имеет смысла
  9. Выводим сообщение о том, является ли квадрат магическим или нет
  10. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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