C/C++
Программирование C++. Двумерные массивы
Написать код к задаче: Дана целая квадратная матрица. Определить, является ли она “магическим квадратом”. “Магический квадрат” - это квадратная матрица размера NxN, составленная из чисел от 1 до n^2, так что суммы по каждому столбцу, каждой строке и каждой из двух больших диагоналей равны между собой.
#include<iostream>
#include<set>
using namespace std;
bool is_magik(int32_t** mas, size_t size)
{
set<int32_t>numeric;
for (size_t i = 0; i < size; i++)for (size_t j = 0; j < size; j++)numeric.insert(mas[i][j]);
if (numeric.size() != size * size || *numeric.begin() != 1 || *--numeric.end() != size * size) return false; //check sequence
size_t sum{}, sum_other{}, sum_diag1{},sum_diag2{};
for (size_t i = 0; i < size; i++) sum += mas[0][i];
for (size_t i = 1; i < size; i++) //check str
{
for (size_t j = 0; j < size; j++)sum_other += mas[i][j];
if (sum_other != sum) return false; sum_other = 0;
}
for (size_t i = 0; i < size; i++) //chek col
{
for (size_t j = 0; j < size; j++)sum_other += mas[j][i];
if (sum_other != sum) return false; sum_other = 0;
sum_diag1 += mas[i][i]; sum_diag2 += mas[size - i - 1][i];
}
if (sum_diag1 != sum_diag2 || sum_diag1 != sum) return false; //chek diag
return true;
}
int main()
{
int num[16]{ 7,12,1,14,2,13,8,11,16,3,10,5,9,6,15,4 }; //пример
const int size = 4; //пример
int** m = new int* [size];
for (int i = 0; i < size; i++) m[i] = new int[size];
for (int i = 0; i < size; i++)for (int j = 0; j < size; j++)m[i][j] = num[i * size + j];
cout << (is_magik(m, size)?"Is magic!":"Is not magic!");
}
#include<set>
using namespace std;
bool is_magik(int32_t** mas, size_t size)
{
set<int32_t>numeric;
for (size_t i = 0; i < size; i++)for (size_t j = 0; j < size; j++)numeric.insert(mas[i][j]);
if (numeric.size() != size * size || *numeric.begin() != 1 || *--numeric.end() != size * size) return false; //check sequence
size_t sum{}, sum_other{}, sum_diag1{},sum_diag2{};
for (size_t i = 0; i < size; i++) sum += mas[0][i];
for (size_t i = 1; i < size; i++) //check str
{
for (size_t j = 0; j < size; j++)sum_other += mas[i][j];
if (sum_other != sum) return false; sum_other = 0;
}
for (size_t i = 0; i < size; i++) //chek col
{
for (size_t j = 0; j < size; j++)sum_other += mas[j][i];
if (sum_other != sum) return false; sum_other = 0;
sum_diag1 += mas[i][i]; sum_diag2 += mas[size - i - 1][i];
}
if (sum_diag1 != sum_diag2 || sum_diag1 != sum) return false; //chek diag
return true;
}
int main()
{
int num[16]{ 7,12,1,14,2,13,8,11,16,3,10,5,9,6,15,4 }; //пример
const int size = 4; //пример
int** m = new int* [size];
for (int i = 0; i < size; i++) m[i] = new int[size];
for (int i = 0; i < size; i++)for (int j = 0; j < size; j++)m[i][j] = num[i * size + j];
cout << (is_magik(m, size)?"Is magic!":"Is not magic!");
}
Считаешь строки, например 1-ая строка в массиве это 00 01 02 03 04, 1-ый столбец 00 10 20 30 04, диагональ сверху слева к направо вниз 00 11 22 33 44, диагональ сверху справа к низу слева 04 13 22 31 40.
00 это типо array[0][0]
Вообще, задача лёгкая, нужно немного подумать, поработать с циклами, описания выше должно быть достаточно
00 это типо array[0][0]
Вообще, задача лёгкая, нужно немного подумать, поработать с циклами, описания выше должно быть достаточно
Похожие вопросы
- Программирование. Обработка двумерных массивов (матриц)
- Программирование С++; двумерный массив
- C++ программирование с использованием динамических двумерных массивов
- Двумерные массивы C++, ничего не понимаю((( Нужна помощь
- Программирование алгоритмов с использованием двумерных массивов c++
- Задача.Программирование.С++.Динамический двумерный массив.
- Двумерный массив C++
- Заполнить двумерный массив 5*3 и найти строку с максимальным произведением элементов. C++
- C++ двумерный статич. массив
- Минимакс двумерного массива, c#