#include
<
stdio.h
>
#include < stdlib.h >
int ** a,n,m = 1 ;
void Initarry()
{
int i,j;
a = ( int ** )malloc((n + 1 ) * sizeof ( int * ));
for (i = 0 ;i <= n;i ++ )
a[i] = ( int * )malloc((n + 1 ) * sizeof ( int ));
for (i = 0 ;i < n;i ++ )
for (j = 0 ;j <= n;j ++ )
a[i][j] = 0 ;
}
void print()
{
int i,j;
for (i = 0 ;i < n;i ++ ){
for (j = 0 ;j < n;j ++ )
printf( " %-4d " ,a[i][j]);
if (j == n)
printf( " " );
}
}
void draw( int x)
{
int i,j;
for (j = x;j < n - x;j ++ ,m ++ ){
a[x][j] = m;
}
for (i = x + 1 ;i < n - x;i ++ ,m ++ ){
a[i][n - 1 - x] = m;
}
for (j = n - 2 - x;j >= x;j -- ,m ++ ){
a[n - 1 - x][j] = m;
}
for (i = n - 2 - x;i > x;i -- ,m ++ ){
a[i][x] = m;
}
}
int main()
{
int x = 0 ;
scanf( " %d " , & n);
Initarry(); // 初始化数组
print();
while (m <= n * n){
draw(x); // 从对角线(0,0)(1,1)(2,2).....开始赋值
x ++ ;
}
print();
return 0 ;
}
#include < stdlib.h >
int ** a,n,m = 1 ;
void Initarry()
{
int i,j;
a = ( int ** )malloc((n + 1 ) * sizeof ( int * ));
for (i = 0 ;i <= n;i ++ )
a[i] = ( int * )malloc((n + 1 ) * sizeof ( int ));
for (i = 0 ;i < n;i ++ )
for (j = 0 ;j <= n;j ++ )
a[i][j] = 0 ;
}
void print()
{
int i,j;
for (i = 0 ;i < n;i ++ ){
for (j = 0 ;j < n;j ++ )
printf( " %-4d " ,a[i][j]);
if (j == n)
printf( " " );
}
}
void draw( int x)
{
int i,j;
for (j = x;j < n - x;j ++ ,m ++ ){
a[x][j] = m;
}
for (i = x + 1 ;i < n - x;i ++ ,m ++ ){
a[i][n - 1 - x] = m;
}
for (j = n - 2 - x;j >= x;j -- ,m ++ ){
a[n - 1 - x][j] = m;
}
for (i = n - 2 - x;i > x;i -- ,m ++ ){
a[i][x] = m;
}
}
int main()
{
int x = 0 ;
scanf( " %d " , & n);
Initarry(); // 初始化数组
print();
while (m <= n * n){
draw(x); // 从对角线(0,0)(1,1)(2,2).....开始赋值
x ++ ;
}
print();
return 0 ;
}
昨天在论坛上看到的一个贴:
8. 输入一个正整数n,打印如下n*n的方阵。
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
n=5时
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
n=6时
感觉挺好玩的,貌似难度也不大
一开始的想法是看看有没有规律,结果看了N久没看出来,哎,数学太烂啊
于是就只能用最笨的办法,一个一个的打印了
不过在这过程中复习了下2维数组空间的申请,嘿嘿
a
=
(
int
**
)malloc((n
+
1
)
*
sizeof
(
int
*
));
for (i = 0 ;i <= n;i ++ )
a[i] = ( int * )malloc((n + 1 ) * sizeof ( int ));
for (i = 0 ;i <= n;i ++ )
a[i] = ( int * )malloc((n + 1 ) * sizeof ( int ));
全代码如下: