Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.12.2017
Сообщений: 8
1

Определить, является ли матрица магическим квадратом

15.05.2018, 00:56. Показов 1166. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана матрица
A(n*n) целых чисел, составленная из чисел 1 , 2 , . . . n2.
Определить, является ли она «магическим квадратом» (т.е. суммы по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой)
помогите составить код.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.05.2018, 00:56
Ответы с готовыми решениями:

Определить, является ли матрица магическим квадратом
4. Определить, является ли квадратная матрица N–го порядка магическим квадратом, в котором сумма...

Определить является ли матрица магическим квадратом
Задача: Дана целая квадратная матрица n-го порядка. Определить является ли она магическим...

Определить, является ли матрица магическим квадратом
Здравствуйте, помогите дописать программу по определению: является ли матрица Маг.кв. или нет....

Определить является ли заданная квадратная матрица порядка n магическим квадратом
Определить является ли заданная квадратная матрица порядка n магическим квадратом, то есть такой, в...

1
2305 / 1131 / 702
Регистрация: 25.04.2016
Сообщений: 3,220
15.05.2018, 05:30 2
Лучший ответ Сообщение было отмечено Benjamin_Mendez как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#define n 9
int main (void)
{
    int c, i, k;
    int a[n][n];
 
    /* заполняем массив числами, начиная с 1 */
    c = 1;
    for (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;  // если проверка успешна, считаем что квадрат магический
 
    /* проверяем строки */
    for (i=0; i<n; i++)
    {
        for (s2=k=0; k<n; k++)      // находим сумму в строке
            s2 += a[i][k];
        /* если сумма не равна диагонали, то дальше проверять нет смысла */
        if (s2 != s1) {c = 0; goto end;}
    }
 
    /* проверяем столбцы */
    for (i=0; i<n; i++)
    {
        for (s2=k=0; k<n; k++)
            s2 += a[k][i];
        if (s2 != 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, но понадобится еще одна переменная для подсчета суммы и еще одна проверка в условии на досрочное завершение программы, т.е.:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#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;
}
0
15.05.2018, 05:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.05.2018, 05:30
Помогаю со студенческими работами здесь

Является ли данная целая квадратная матрица 9-го порядка, магическим квадратом?
Определить, является ли данная целая квадратная матрица 9-го порядка, магическим квадратом, то есть...

Проверить, является ли матрица "магическим квадратом"
Доброго времени суток :) Не могу доработать программу с использованием динамических переменных :(...

Является ли матрица В[N][N] квадратом матрицы А[N][N]
Программа: написать глобальную функцию: Проверить, является ли матрица В квадратом матрицы А, и...

Проверка, является ли матрица латинским квадратом
не могу найти ошибку ,программа работает не правильно #include &lt;windows.h&gt; #include &lt;stdio.h&gt;...

Проверка, является ли матрица латинским квадратом
Какие проверки нужно сделать чтобы выяснить является ли массив размером nxn латинским...

Проверить, является ли матрица латинским квадратом
Здравствуйте! Очень нужна помощь с задачей. Нужно проверить, является ли матрица(5*5) латинским...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru