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

    蛇形填数

    时间限制(普通/Java) : 5000 MS/ 3000 MS          运行内存限制 : 65536 KByte
    总提交 : 1023            测试通过 : 382 

    题目描述

    在n×n方阵里填入1,2,…, n×n,要求填成蛇形(见样例)。


    输入

    输入正整数n,n≤64。

    输出

    输出蛇形矩阵,要求每个数格式宽度为5、右对齐。

    样例输入

    4

    样例输出

       10   11   12    1
        9   16   13    2
        8   15   14    3
        7    6    5    4

    #include<stdio.h>
    #include<string.h>
    #define N 64+1
    int a[N][N]; //存数
    int i,j,x,y,n,cnt=1;  //i,j分别用来表示二维数组的行与列,x与y分别动态表示数组行与列,
    //n表示方阵行数(列数),cnt用来计数
    int main()
    {
        scanf("%d",&n);
        memset(a,0,sizeof(a)); //将数组清零;
        x=0,y=n-1;
        a[x][y]=1;
        while(cnt<n*n)
        {
            while((x+1)<n&&!a[x+1][y]) a[++x][y]=++cnt;  //下
            while((y-1)>=0&&!a[x][y-1]) a[x][--y]=++cnt;  //左
            while((x-1)>=0&&!a[x-1][y]) a[--x][y]=++cnt;  //上
            while((y+1)<n&&!a[x][y+1]) a[x][++y]=++cnt;  //右
        }
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("%5d",a[i][j]);
            }
            printf("
    ");
        }
    }
    我们的原则是:先判断,再移动,而不是走一步之后发现越界了再退回来。这是我们需要预判,即是否越界,以及如果继续往下走是不是会到达一个已经填写过的格子。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    小技巧
    sql日期函数
    c#发送邮件
    js点滴
    Js序列化时间
    js中string的操作
    原系统中有AD FS , CRM Server ,迁移ADFS 到另一台电脑 , CRM Server用443端口出错
    解决UR 12后ISV目录不能用的问题
    Lucene .Net 版本
    Android 开源项目
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965614.html
Copyright © 2011-2022 走看看