Дан символьный массив 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; }
Вот, вроде работает. Хотя то, о чем ты говоришь называется полумагический квадрат, там же еще сумма по диагоналям) 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"; }