zoukankan      html  css  js  c++  java
  • 蛇形填数

    一道简单但有趣的数组题:

    在n*n方阵中输出蛇形数组,n<=8,空格不必输出,例如

    10 11 12 1

     9  16 13 2

     8  15 14 3

     7   6   5  4

    代码:

    #include"iostream"
    #include"cmath"
    #include"string.h"
    using namespace std; 
    
    #define max 10
    
    int a[max][max];
    
    int main()
    {
        int n,x,y,cot=1;
        scanf("%d",&n);
        memset(a,0,sizeof(a));
        a[x=0][y=n-1]=1;
    
        while(cot<n*n)
        {
            while(x+1<n && !a[x+1][y]) a[++x][y]=++cot;
            
            while(y-1>=0 && !a[x][y-1]) a[x][--y]=++cot;
            
            while(x-1>=0 && !a[x-1][y]) a[--x][y]=++cot;
    //        cout<<a[x][y]<<endl;
    //        break;
            while(y+1<n && !a[x][y+1]) a[x][++y]=++cot;
            
        }
        for(x=0;x<n;++x)
        {
        for(y=0;y<n;++y)
        printf("%3d ",a[x][y]);
        printf("
    ");
        }
        return 0;
    }

    第一次运行,没有出结果,依次用注释部分的检测代码,从大while循环外检测到内部,到第三个小while时,检测出了问题

    需要注意的点很多,一定要认真。

    另外值得注意的是:

    && 是短路运算符,因此,小while中的判断:把a[x+1]放在&&之后,是有一定道理的,放在前面的话,当x=n-1时,x+1=n,数组访问非法地址;放在后面,前面的判断就决定了x+1<n,就不会出现非法访问的问题。

    柳暗花明又一村
  • 相关阅读:
    BZOJ 3160 万径人踪灭
    BZOJ 2160 拉拉队排练
    模板 manacher算法
    [Tjoi2016&Heoi2016]求和
    [HZOI 2015]疯狂的机器人
    [BZOJ3456]城市规划
    BZOJ 4372 烁烁的游戏
    洛谷3794 签到题IV
    BZOJ 3730 震波
    BZOJ 4916 神犇和蒟蒻
  • 原文地址:https://www.cnblogs.com/ucandoit/p/8232817.html
Copyright © 2011-2022 走看看