C语言输出蛇形方阵

蛇形方阵,这是一种输出方式,我个人认为是对二维数组理解的运用,

我们先看一下输入和输出吧

第一行先输入数字n,开始从1开始

就是像一条蛇一样,盘旋排列直至等于输入的数的平方

我们先思考一下,每次输出都是按行输出的,就是第一行输出完第二行,第二行输出完第三行.....以此类推

那咱们怎么才能做到呢,其实我刚开始也是一头雾水,但是咱们可以换一个思路:

将这个二维数组看成一个n*n的空间,咱们在这个空间内咱们想要的位置赋值,然后将二维数组依次输出就OK了

我是暴力找位置赋值

从第一个空间进行赋值,然后该换行和换列时,用while来进行判断(其实我个人觉得for也可以,但是我之前没写出来,我是fw)

上代码!!!

#include<stdio.h>

int main (void)
{
    int n=0,i=1,k=1,count=1;
    scanf("%d",&n);
    int a[10][10]={0};
    while(count<=n*n)
    {
        //在a[i][k]中,i代表纵列,k代表横行
        //这里的四个循环是按照先往右赋值在往下赋值,再往左赋值,再往上赋值
            while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)//这其中的条件是使在n*n的格子中赋值,不跑出去
            {
                a[i][k]=count;
                k++;
                count++;            
            }
            //当a[i][k]移到该移动的最后一个格子时,赋完值会进入下一个格子,此时减一个i,会回到赋完值的最后一个格子
            k--;
            //再将格子往下移一个就是该赋值的格子
            i++;
            //下面加的count,也是相同的原因,多加了一次,所以开始不用加1
            while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
            {
                a[i][k]=count;
                i++;
                count++;            
            }
            //同上,因为会多走一格,所以减掉
            i--;
            //往下走完了,该往左走
            k--;
            while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
            {
                a[i][k]=count;
                k--;
                count++;            
            }
            k++;
            //往上走
            i--;
            while(a[i][k]==0&&i>0&&i<=n&&k>0&&k<=n&&count<=n*n)
            {
                a[i][k]=count;
                i--;
                count++;            
            }
            i++;
            //k++衔接下次循环
            k++;
    }
    //输出结果,为了好看,每个数占三格
    for(i=1;i<=n;i++)
    {
        for(k=1;k<=n;k++)
        {
            printf("%-3d",a[i][k]);        
        }  
        //不要忘记换行了
        printf("\n");  
    }
    return 0;
}

这就是蛇形方阵了,其实我感觉写完这道题,我的二维数组有了突破,理解更深了吧,加油!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值