Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
fierswolf
0 / 0 / 0
Регистрация: 09.10.2011
Сообщений: 16
#1

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

16.10.2011, 11:40. Просмотров 519. Ответов 1
Метки нет (Все метки)

Дана целая квадратная матрица n-го порядка определить является ли она магическим квадратом, то есть такой, в которой суммы элементов во всех строках и столбцах одинаковы.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.10.2011, 11:40     Определить, является ли матрица магическим квадратом
Посмотрите здесь:
C++ Определить является ли матрица магическим квадратом
C++ Определить является ли матрица магическим квадратом
C++ Определить является ли матрица магическим квадратом
Определить, является ли матрица магическим квадратом C++
C++ Определить, является ли матрица магическим квадратом
C++ Определить, является ли матрица магическим квадратом
Определить, является ли матрица магическим квадратом C++
C++ Определить, является ли матрица магическим квадратом
C++ Определить, является ли матрица магическим квадратом
C++ Определить, является ли квадратная матрица магическим квадратом
Определить ,является ли заданная квадратная матрица магическим квадратом C++
C++ Определить, является ли заданная целочисленная матрица магическим квадратом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
16.10.2011, 13:21     Определить, является ли матрица магическим квадратом #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
 
int is_magic_square(int *, int);
void print_matrix(int *, int);
 
int main()
{
    int  m[3][3] = {
        {2, 7, 6},
        {9, 5, 1},
        {4, 3, 8}
    };
    int m1[4][4] = {
        {7, 12, 1, 14},
        {2, 13, 8, 11},
        {16, 3, 10, 5},
        {9, 6, 15,  4}
    };
    int m2[4][4] = {
        {7, 12, 1, 14},
        {2, 13, 7, 11}, /* 7 is wrong */
        {16, 3, 10, 5},
        {9, 6, 15,  4}
    };
 
    print_matrix(*m, 3);
    printf(is_magic_square(*m, 3) ? "is a magic" : "is not a magic");
    printf(" square!\n\n");
 
    print_matrix(*m1, 4);
    printf(is_magic_square(*m1, 4) ? "is a magic" : "is not a magic");
    printf(" square!\n\n");
 
    print_matrix(*m2, 4);
    printf(is_magic_square(*m2, 4) ? "is a magic" : "is not a magic");
    printf(" square!\n\n");
    return 0;
}
 
 
#define INDEX(i, j, ord) ((ord) * (i) + (j))
/*
 * is_magic_square: processes static square matrices
 * of any order, does not handle dynamic arrays
 */
int is_magic_square(int *m, int order)
{
    int i, j, sum;
    int prevs;  /* previous sum */
 
    sum = 0;    
    for (i = 0; i < order; i++) {  /* rows */
        prevs = sum;
        for (sum = j = 0; j < order; j++)
            sum += m[ INDEX(i, j, order) ];
        if (i != 0 && sum != prevs)
            return 0;
    }
    for (j = 0; j < order; j++) {  /* columns */
        prevs = sum;
        for (sum = i = 0; i < order; i++)
            sum += m[ INDEX(i, j, order) ];
        if (sum != prevs)
            return 0;
    }
    prevs = sum;            /* first diagonal */
    for (i = j = sum = 0; i < order; i++, j++)
        sum += m[ INDEX(i, j, order) ];
    if (prevs != sum)
        return 0;
    prevs = sum;           /* second diagonal */
    for (i = sum = 0, j = order-1; i < order; i++, j--)
        sum += m[ INDEX(i, j, order) ];
    if (prevs != sum)
        return 0;
    return 1;
}
 
void print_matrix(int *m, int order)
{
    int i;
 
    for (i = 0; i < order * order; i++)
        printf("%2d%c", m[i], ((i+1) % order) ? ' ' : '\n');
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru