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、付费专栏及课程。

余额充值