• NYOJ-蛇形填数


    蛇形填数

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:3
    描述
    在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
    10 11 12 1
    9 16 13 2
    8 15 14 3
    7 6 5 4
    输入
    直接输入方陈的维数,即n的值。(n<=100)
    输出
    输出结果是蛇形方陈。
    样例输入
    3
    样例输出
    7 8 1
    6 9 2
    5 4 3
    思路:手撸n=2,3,4,5,6,7,会发现各个位置的数字没有加减规律,不能直接打印,所以必须先赋值,再打印;赋值是从1开始,向里面旋转赋值,n为奇数有个中心点可以打出来,如果是偶数则没有中心点,比较麻烦。n*n矩阵,1从最后一列开始向下赋值,赋值到尽头向左,赋值到尽头再向上,然后再向左向下,循环下左上右。
    举例n=6,先打从1开始向下初始化6次,然后向左5次,向上5次,向右4次,向下4次,向左3次,向上3次,向右2次,向下2次,向左1次,向上1次。
    简单点表示,循环下左右上,分别初始化赋值 6 5 5 4 4 3 3 2 2 1 1次
    再举例n=5,先打从1开始向下初始化5次,然后向左4次,向上4次,向右3次,向下3次,向左2次,向上2次,向右1次,向下1次。  
    简单点表示,循环下左右上,分别初始化赋值5 4 4 3 3 2 2 1 1次
    发现规律,先初始化赋值一列n个,之后每次初始化赋值次数逐渐减少,并且矩阵一行一列的初始化个数一样。
    第一列比较特殊,可以另外初始化,其他则按规律写代码,那就是左上右下赋值。
    需要实现的功能:1、拐弯,左上右下的规律 2、n到1逐渐递减 3、每次赋值2次 4、数组内容逐渐增加
    AC代码:
    #include<stdio.h>
    #include<iostream>
    #include<cstring>
    using namespace std;
    int a[101][101];
    
    ///左上右下
    int shu[4]={0,-1,0,1};
    int heng[4]={-1,0,1,0};
    
    int main()
    {
        memset(a,0,sizeof(a));
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)   ///先赋值最后一列
            a[i][n]=i;
        int num;                ///每次赋值到底的个数
        num=n-1;                ///从n-1开始
        int f=0,r;              ///判断方向,r=f%4,0123分别是左上右下
        int x=n,y=n,m=n;        ///数组下标,从右下角开始
        for(int i=num;i>=1;i--)
        {
            int t=2;
            while(t--)
            {
                r=(f++)%4;
                for(int j=0;j<i;j++)///i次
                {
                    x=x+shu[r];
                    y=y+heng[r];
                    a[x][y]=++m;
                }
            }
        }
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            if(j!=n) printf("%d ",a[i][j]);
            else printf("%d
    ",a[i][j]);
        }
        return 0;
    }
  • 相关阅读:
    spring cloud config 属性加解密
    IntelliJ IDEA 快捷键
    SQL Server 2012 安装图解教程(附sql2012下载地址)
    spring cloud 启动报错-must be declared as an @AliasFor [serviceId], not [name].
    MySQL主从复制配置
    恢复MySQL数据库删除的数据
    java.lang.IllegalStateException: No instances available for localhost
    蜘蛛牌 (DFS)
    加油站问题 (优先队列)
    堆的操作的复杂度
  • 原文地址:https://www.cnblogs.com/shoulinniao/p/9539069.html
Copyright © 2020-2023  润新知