花了点时间,看了下代码,修改如下,望采纳:
#include
int main()
{
int s[50][50] = {0}; // 定义时直接初始化
int i, j, k, n, a, b;
scanf ( "%d", &n );
/*
// 定义时初始化,下面的初始化代码不需要
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
s[i][j] = 0;
*/
i = 0;
j = ( ( n + 1 ) / 2 ) - 1;
s[i][j] = 1;
for ( k = 2; k <= n*n; k++ ) // 应改为k<= n*n,这就是只算到3的原因
{
a = i;
b = j;
i--;
j++;
if ( i < 0 )
i = n - 1;
if ( j > n - 1 )
j = 0;
// 此处要用a,b来判断上一个数的位置,而不是用代表当前数值的i,j
if ( ( ( a == 0 ) && ( b == n - 1 ) ) || ( s[i][j] != 0 ) )
{
i = a + 1;
j = b;
s[i][j] = k;
continue;
}
s[i][j] = k;
}
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < n; j++ )
{
printf ( "%10d", s[i][j] );
}
printf ( "\n" );
}
return 0;
}