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

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

Восстановить пароль Регистрация
 
haveystar
0 / 0 / 0
Регистрация: 15.07.2013
Сообщений: 6
05.10.2013, 15:50     Определить ,является ли заданная квадратная матрица магическим квадратом #1
Написать программу,которая позволяет определить ,является ли заданная квадратная матрица магическим квадратом ,то есть такой , в которой суммы элементов во всех рядках и столбцах одинаковые !!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 15:50     Определить ,является ли заданная квадратная матрица магическим квадратом
Посмотрите здесь:

C++ Определить, является ли матрица магическим квадратом
Определить, является ли заданная матрица N-го порядка магическим квадратом. C++
Определить, является ли заданная матрица N-го порядка магическим квадратом, т.е. такой, в которой сумма элементов во всех строках и столбцах одинакова C++
Определить, является ли матрица магическим квадратом C++
Определить, является ли матрица магическим квадратом C++
C++ Определить является ли матрица магическим квадратом
C++ Определить, является ли матрица магическим квадратом
C++ Определить, является ли матрица магическим квадратом

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
05.10.2013, 19:06     Определить ,является ли заданная квадратная матрица магическим квадратом #2
Цитата Сообщение от haveystar Посмотреть сообщение
Написать программу,которая позволяет определить ,является ли заданная квадратная матрица магическим квадратом ,то есть такой , в которой суммы элементов во всех рядках и столбцах одинаковые !!
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
                          /*** -std=c++03 ***/
#include <iostream>
 
enum Type {MAGIC, NOMAGIC} flag = MAGIC; // Сразу считаем, что матрица магическая.
 
int main( int argc, char* argv[] )
{
    const size_t rowSize = 5, colSize = 5;
    int matrix[rowSize][colSize] =
    {
        {1, 15, 24, 8, 17 },
        {9, 18, 2, 11, 25 },
        {12, 21, 10, 19, 3},
        {20, 4, 13, 22, 6 },
        {23, 7, 16, 5, 14 }
    };
    int sum = 0;
    for(size_t i = 0; i < colSize; ++i)
        sum += matrix[0][i];
 
 
    int currentRowSum = 0, currentColSum = 0;
 
    // Проверяем сумму в столбцах.
    for(size_t i = 0; i < colSize; ++i)
    {
        for(size_t j = 0; j < rowSize; ++j)
            currentColSum += matrix[j][i];
        // Если не совпадает с эталоном - матрица не магическая - выходим.
        if(currentColSum != sum)
        {
            flag = NOMAGIC;
            break;
        }
        currentColSum = 0; // Обнуляем для следующего подсчета.
    }
 
    // Проверяем сумму в строках (аналогично).
    if(flag == MAGIC)
    {
        for(size_t i = 0; i < rowSize; ++i)
        {
            for(size_t j = 0; j < colSize; ++j)
                currentRowSum += matrix[i][j];
            if(currentRowSum != sum)
            {
                flag = NOMAGIC;
                break;
            }
            currentRowSum = 0;
        }
    }
 
    if(flag == MAGIC)
        std::cout <<"MAGIC square!" <<std::endl;
    else
        std::cout <<"SIMPLE square!" <<std::endl;
 
    return EXIT_SUCCESS;
}

Вариант прямолинейный, но рабочий. Как либо оптимизировать лень.
Добавлено через 4 минуты
Ах да! Чтобы квадрат считался магическим, нужно чтобы сумма элементов двух диагоналей также была одинаковой. Но хозяин -- барин, как говорится .

Добавлено через 32 минуты
Ладно, глазам больно смотреть. Версия 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
                          /*** -std=c++03 ***/
#include <iostream>
 
int main()
{
    bool isMagic = true; // Сразу считаем, что матрица магическая.
    const size_t size = 5;
    int matrix[size][size] =
    {
        {1, 15, 24, 8, 17 },
        {9, 18, 2, 11, 25 },
        {12, 21, 10, 19, 3},
        {20, 4, 13, 22, 6 },
        {23, 7, 16, 5, 14 }
    };
    int sum = 0;
    for(size_t i = 0; i < size; ++i)
        sum += matrix[0][i];
 
 
    int rowSum = 0, colSum = 0, mainDiagonalSum = 0, sideDiagonalSum = 0;
 
    // Проверяем сумму в столбцах.
    for(size_t i = 0; i < size; ++i)
    {
        for(size_t j = 0; j < size; ++j)
            colSum += matrix[j][i];
        // Если не совпадает с эталоном - матрица не магическая - выходим.
        if(colSum != sum)
        {
            isMagic = false;
            break;
        }
        colSum = 0; // Обнуляем для следующего подсчета.
    }
 
    // Проверяем сумму в строках (аналогично).
    if(isMagic)
    {
        for(size_t i = 0; i < size; ++i)
        {
            for(size_t j = 0; j < size; ++j)
                rowSum += matrix[i][j];
            if(rowSum != sum)
            {
                isMagic = false;
                break;
            }
            rowSum = 0;
        }
    }
 
    // Главная диагональ.
    if(isMagic)
    {
        for(size_t i = 0; i < size; ++i)
            mainDiagonalSum += matrix[i][i];
 
        if(mainDiagonalSum != sum)
            isMagic = false;
    }
 
    // Побочная диагональ (подымаемся с левого нижнего в правый верхний угол).
    if(isMagic)
    {
        size_t i = size-1, j = 0;
        while( j < size ) // i проверять бессмысленно.
            sideDiagonalSum += matrix[i--][j++];
 
        if(sideDiagonalSum != sum)
            isMagic = false;
    }
 
    if(isMagic)
        std::cout <<"MAGIC square!" <<std::endl;
    else
        std::cout <<"SIMPLE square!" <<std::endl;
 
    return EXIT_SUCCESS;
}
Yandex
Объявления
05.10.2013, 19:06     Определить ,является ли заданная квадратная матрица магическим квадратом
Ответ Создать тему
Опции темы

Текущее время: 20:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru