一个C语言编程题

来源:百度知道 编辑:UC知道 时间:2024/05/21 16:52:18
打印由1到n*n的自然数构成的魔方阵.每一行,每一列和对角线之和都相等.
怎么编啊?

这个只能算奇数的

#include <iostream>
#include <iomanip>

using namespace std;

int main( )
{
int n;
scanf("%d", &n);
int row, col, i, m[ n * n ];
memset( m, 0, sizeof( m ) );
for (i = 1, row = 0, col = n >> 1; i <= n * n; i++ )
{
m[row * n + col] = i;
if ( m[ ( row + n - 1 ) % n * n + ( col + 1 ) % n ] )
{
row = ( row + 1 ) % n;
}
else
{
row = (row + n - 1) % n;
col = (col + 1) % n;
}
}
for ( row = 0; row < n; row++ )
{
for ( col = 0; col < n; col++ )
cout << setw( 4 ) << m[ row * n + col ];
cout << endl;
}
return 0;
}

那不是要无穷大了