Магический квадрат - C (СИ)
Формулировка задачи:
Здравствуйте, помогите дописать программу по определению: является ли матрица Маг.кв. или нет.
Взял квадрат 3*3.
Получается, что я нашёл сумму всех строк и столбцов,и в итоге определил какое число получается в 1 строке,разделив на размерность массива, что не может быть верным.
В итоге в матрице
1 2 3
4 5 6
7 8 9
получается, что это Маг. кв. т.к. (сумма всех чисел)/3 = сумме чисел по диагонали. Чушь...
#include <stdio.h>
const int N=3;
int main () {
int mass[N][N];
int i,j,p,g,k,t;
int sumSTR=0;
int sumSTB=0;
int diag1=0;
int diag2=0;
for (i=0; i<N; i++){
printf ("\n");
for (j=0; j<N; j++){
printf ("mass[%d][%d]= ", i,j);
scanf ("%d", &mass[i][j]);
}
}
for (i=0; i<N; i++){
for (j=0; j<N; j++){
sumSTR+=mass[i][j];
}
}
sumSTR /= N;
for (j=0; j<N; j++){
for (t=0; t<N; t++){
sumSTB+=mass[t][j];
}
}
sumSTB /= N;
for (p=0,j=0; p<N; p++,j++){
diag1+=mass[p][j];
}
for (g=0, k=N-1; g<N; g++, k--){
diag2+=mass[g][k];
}
printf("\n%d",sumSTR);printf("\n");
printf("%d",sumSTB);printf("\n");
printf("%d",diag1);printf("\n");
printf("%d",diag2);printf("\n");
int CONTROL = sumSTR;
if ((sumSTR == CONTROL) && (sumSTB == CONTROL) && (diag1 == CONTROL) && (diag2 == CONTROL)){
printf ("Magic matrix");
}
else {
printf ("not magic matrix");
}
return 0;
}Решение задачи: «Магический квадрат»
textual
Листинг программы
#include <stdio.h>
const int N=3;
int main (void) {
int mass[N][N];
int i,j,p,g,k,t;
int m=0;
int sumSTR=0;
int sumSTB=0;
int diag1=0;
int diag2=0;
printf ("\n");
for (i=0; i<N; i++){
for (j=0; j<N; j++){
printf ("mass[%d][%d]= ", i,j);
scanf ("%d", &mass[i][j]);
}
}
for (i=0,j=0; j<N; j++){
m+=mass[i][j];
}
for (i=1; i<N; i++){
sumSTR=0;
for (j=0; j<N; j++)
sumSTR+=mass[i][j];
if (sumSTR != m){
printf ("It s not magic");
return 0;
}
}
for (j=0; j<N; j++){
sumSTB = 0;
for (t=0; t<N; t++)
sumSTB+=mass[t][j];
if (sumSTB != m){
printf ("It s not magic");
return 0;
}
}
for (p=0,j=0; p<N; p++,j++)
diag1+=mass[p][j];
if (diag1 != m){
printf ("It s not magic");
return 0;
}
for (g=0, k=N-1; g<N; g++, k--)
diag2+=mass[g][k];
if (diag2 != m){
printf ("It s not magic");
return 0;
}
printf("\n%d",sumSTR);printf("\n");
printf("%d",sumSTB);printf("\n");
printf("%d",diag1);printf("\n");
printf("%d",diag2);printf("\n");
int CONTROL = m;
if ((sumSTR == CONTROL) && (sumSTB == CONTROL) && (diag1 == CONTROL) && (diag2 == CONTROL)){
printf ("Magic matrix");
}
else {
printf ("not magic matrix");
}
return 0;
}
Объяснение кода листинга программы
- Объявлены переменные:
- mass[N][N] - массив размером NxN для ввода чисел;
- i, j, p, g, k, t - циклы для перебора элементов массива;
- m - сумма чисел в главной диагонали;
- sumSTR, sumSTB - суммы чисел в строках и столбцах;
- diag1, diag2 - суммы чисел в главной и побочной диагоналях;
- CONTROL - контрольное значение (сумма чисел в матрице).
- Заполнение массива mass[N][N] числами с помощью цикла и функции scanf.
- Проверка на магичность матрицы:
- Проверка суммы чисел в каждой строке на равенство m (если не магическая - выводится сообщение и программа завершается).
- Проверка суммы чисел в каждом столбце на равенство m (если не магическая - выводится сообщение и программа завершается).
- Проверка суммы чисел в главной диагонали на равенство m (если не магическая - выводится сообщение и программа завершается).
- Проверка суммы чисел в побочной диагонали на равенство m (если не магическая - выводится сообщение и программа завершается).
- Вывод значений sumSTR, sumSTB, diag1, diag2.
- Проверка магичности матрицы:
- Если sumSTR, sumSTB, diag1, diag2 равны CONTROL, то выводится
Magic matrix. - В противном случае выводится
not magic matrix.
- Если sumSTR, sumSTB, diag1, diag2 равны CONTROL, то выводится