n*n的方阵的打印

 

#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 ;
}

昨天在论坛上看到的一个贴:

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 ));

全代码如下:


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值