Магический квадрат

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Occupier, 29 Nov 2017.

  1. Occupier

    Occupier New Member

    Joined:
    29 Nov 2017
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Дан символьный массив A[N ][N]. Проверить, является ли данный массив «магическим квадратом», то есть, одинаковы ли суммы элементов во всех строках и столбцах. Мне надо сравнить суммы элементов всех строк и всех столбцов, но проблема в том, что программа суммирует только первый столбец и первую строку, а должна это делать со всеми. Как можно это осуществить?
    #include "stdafx.h"
    #include "iostream"
    #include "clocale"
    using namespace std;

    int main()
    {
    setlocale(LC_ALL, "Russian");
    int n;
    int A[100][100];
    int sum1 = 0, sum2 = 0;
    int i, j;
    cout << "Укажите размерность квадратной матрицы ";
    cin >> n;
    for (i = 0; i <n; i++)
    {
    for (j = 0; j <n; j++)
    {
    cout << " Введите элемент массива " << i << ":" << j << " - ";
    cin >> A[j];
    }
    }
    cout << "Массив: \n";
    for (i = 0; i < n; i++, cout << "\n")
    {
    for (j = 0; j < n; j++)

    cout << A[j] << "\t";
    }
    for (i = 0; i < n; i++)
    sum1 += A[0];
    cout << "sum1 =" << sum1 << endl;
    {
    for (j = 0; j <n; j++)
    {
    sum2 += A[0][j];
    }
    cout << "sum2 =" << sum2 << endl;
    }
    if (sum1 == sum2)
    {
    cout << "Массив является магическим квадратом \n";
    }
    else {
    cout << "Массив не является магическим квадратом \n";
    }
    system("pause");
    return 0;
    }

     
  2. YelloveAntiCh

    YelloveAntiCh New Member

    Joined:
    11 Dec 2017
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Вот, вроде работает. Хотя то, о чем ты говоришь называется полумагический квадрат, там же еще сумма по диагоналям)
    Code:
    #include<iostream>
    
    using namespace std;
    
    int main()
    {
        int A[100][100];
        int n, s = 0, m = 0; // s - сумма стороны; m - сумма конкретной стороны
        bool ka = 1; //флажок
     
        cin >> n;
     
        for(int i = 0; i < n; i++)
            for(int j = 0; j < n; j++) cin >> A[i][j];
         
        for(int i = 0; i < n; i++) s += A[i][0];
     
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < n; j++) m+= A[i][j];
            if(s!=m)
            {
            ka = 0; //не магический квадрат(опускаем флажок)
            break;
            }
            m = 0;
        }
     
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < n; j++) m+= A[j][i]; // i, j поменяли местами, чтобы была сумма по рядам
            if(s!=m)
            {
            ka = 0; //не магический квадрат(опускаем флажок)
            break;
            }
            m = 0;
        }
     
        if(ka)cout << "Yes"; else cout << "No";
    }