#include
<
stdio.h
>
void Init ( int square[][ 20 ], int n) {
int i,j;
for (i = 1 ;i <= n;i ++ ){
for (j = 1 ;j <= n;j ++ )
square[i - 1 ][j - 1 ] = 0 ;
}
}
void put ( int square[][ 20 ], int n)
{
int p,q,l,k,i;
p = n / 2 ;
q = n - 1 ;
for (i = 1 ;i <= n * n;i ++ )
{
square[p][q] = i;
l = q;k = p;
p ++ ;q ++ ;
if (p == n)
p = p % n;
if (q == n)
q = q % n;
if (square[p][q] != 0 )
{
q = l - 1 ;
p = k;
}
if (q ==- 1 )
q = n - 1 ;
}
}
void show ( int square[][ 20 ], int n) {
int i,j;
for (i = 1 ;i <= n;i ++ ) {
for (j = 1 ;j <= n;j ++ )
printf( " %4d " ,square[i - 1 ][j - 1 ]);
printf( " " );
}
}
int calculate ( int square[][ 20 ], int n) {
int s,i;
s = 0 ;
for (i = 1 ;i <= n;i ++ )
s = s + square[ 0 ][i - 1 ];
return s;
}
main () {
int square[ 20 ][ 20 ];
int n,sum;
do {
printf( " 请输入奇数 n: " );
scanf( " %d " , & n);
} while ((n % 2 == 0 ) || (n < 3 ) || (n > 19 ));
Init(square,n);
put(square,n);
show(square,n);
sum = calculate(square,n);
printf( " 共有%d个数. " ,sum);
getch();
}
/* 编写程序实现n阶(n为奇数)魔方。n为外部输入参数,输出结果按方阵排列。 */
void Init ( int square[][ 20 ], int n) {
int i,j;
for (i = 1 ;i <= n;i ++ ){
for (j = 1 ;j <= n;j ++ )
square[i - 1 ][j - 1 ] = 0 ;
}
}
void put ( int square[][ 20 ], int n)
{
int p,q,l,k,i;
p = n / 2 ;
q = n - 1 ;
for (i = 1 ;i <= n * n;i ++ )
{
square[p][q] = i;
l = q;k = p;
p ++ ;q ++ ;
if (p == n)
p = p % n;
if (q == n)
q = q % n;
if (square[p][q] != 0 )
{
q = l - 1 ;
p = k;
}
if (q ==- 1 )
q = n - 1 ;
}
}
void show ( int square[][ 20 ], int n) {
int i,j;
for (i = 1 ;i <= n;i ++ ) {
for (j = 1 ;j <= n;j ++ )
printf( " %4d " ,square[i - 1 ][j - 1 ]);
printf( " " );
}
}
int calculate ( int square[][ 20 ], int n) {
int s,i;
s = 0 ;
for (i = 1 ;i <= n;i ++ )
s = s + square[ 0 ][i - 1 ];
return s;
}
main () {
int square[ 20 ][ 20 ];
int n,sum;
do {
printf( " 请输入奇数 n: " );
scanf( " %d " , & n);
} while ((n % 2 == 0 ) || (n < 3 ) || (n > 19 ));
Init(square,n);
put(square,n);
show(square,n);
sum = calculate(square,n);
printf( " 共有%d个数. " ,sum);
getch();
}
/* 编写程序实现n阶(n为奇数)魔方。n为外部输入参数,输出结果按方阵排列。 */