Магический квадрат, где пользователь может сам задать количество элементов в стороне квадрата - C (СИ)
Формулировка задачи:
Как изменить этот код, чтобы N не была константой, а пользователь сам вводил значение N. Заранее благодарен за ответ
#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;
}Решение задачи: «Магический квадрат, где пользователь может сам задать количество элементов в стороне квадрата»
textual
Листинг программы
int **mass;
int N;
.........
printf("N:");
scanf("%d",&N);
mass=(int**)malloc(N*sizeof(int*));
for(i=0; i<N; i++)
mass[i]=(int*)malloc(N*sizeof(int));
//тут все твое
...............
//закончил
for(i=0; i<N; i++)
free(mass[i]);
free(mass);
Объяснение кода листинга программы
В этом коде:
- Объявляются две переменные: mass (указатель на массив указателей на int) и N (целое число).
- С помощью функции scanf вводится значение переменной N.
- С помощью функции malloc выделяется память под массив указателей на int, а затем с помощью цикла for выделяется память под каждый элемент массива.
- В этом месте кода (после комментария
тут все твое) происходит какая-то конкретная реализация алгоритма для магического квадрата (но это не указано в вопросе, поэтому мы не будем рассматривать этот блок). - После окончания работы с массивом, с помощью цикла for освобождается память, выделенная под каждый элемент массива.
- Освобождается память, выделенная под массив указателей на int.