Магический квадрат - 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, то выводится
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д