am codul urmator si imi merge pana la nr 15,apoi este o problema,ma poate ajuta cineva?
codul e urmatorul:
CODE
#include <stdio.h>
#include <stdbool.h>
/*
"write a program that print n x n magic square witch the sums of rows columns and diagonals are all the same.
Start by placeing nr 1 in the middle of row 0 and the remaining nr's 2,3,n*n by moving up one row and over 1 column.
If an element is occupied put the nr bellow previously stored nr."
*/
int main(void)
{
int i,j,nr;
int count;
bool flag;
printf("Enter size of magic square: ");
scanf("%d", &nr);
int matrix[nr][nr];
for(i = 0; i < nr; i++)
for(j = 0; j < nr; j++)
matrix[i][j] = 0; // initializez toate elementele 0 ca sa pot vedea apoi care sunt libere si care nu
i = 0;
j = (nr - 1) / 2; // j = mijlocul randului 0
count = 1;
while(count <= nr*nr)
{
matrix[i--][j++] = count++; //scad 1 rand si cresc o coloana
if(i < 0) // daca randul = -1 el devine nr -1
i = nr - 1;
if(j == nr) // daca coloana = nr,va deveni 0
j = 0;
if(matrix[i][j] != 0) // daca elementul urmator nu e liber scad o coloana
si 2 randuri in loc de 1 pentru a aloca valoarea lui count sub nr alocat mai devreme
{
i += 2;
j -= 1;
}
}
for(i = 0; i < nr; i++)
{
for(j = 0; j < nr; j++)
printf("%2d ",matrix[i][j]);
printf("\n");
}
return 0;
}
#include <stdbool.h>
/*
"write a program that print n x n magic square witch the sums of rows columns and diagonals are all the same.
Start by placeing nr 1 in the middle of row 0 and the remaining nr's 2,3,n*n by moving up one row and over 1 column.
If an element is occupied put the nr bellow previously stored nr."
*/
int main(void)
{
int i,j,nr;
int count;
bool flag;
printf("Enter size of magic square: ");
scanf("%d", &nr);
int matrix[nr][nr];
for(i = 0; i < nr; i++)
for(j = 0; j < nr; j++)
matrix[i][j] = 0; // initializez toate elementele 0 ca sa pot vedea apoi care sunt libere si care nu
i = 0;
j = (nr - 1) / 2; // j = mijlocul randului 0
count = 1;
while(count <= nr*nr)
{
matrix[i--][j++] = count++; //scad 1 rand si cresc o coloana
if(i < 0) // daca randul = -1 el devine nr -1
i = nr - 1;
if(j == nr) // daca coloana = nr,va deveni 0
j = 0;
if(matrix[i][j] != 0) // daca elementul urmator nu e liber scad o coloana
si 2 randuri in loc de 1 pentru a aloca valoarea lui count sub nr alocat mai devreme
{
i += 2;
j -= 1;
}
}
for(i = 0; i < nr; i++)
{
for(j = 0; j < nr; j++)
printf("%2d ",matrix[i][j]);
printf("\n");
}
return 0;
}
