• 【NYOJ】[33]蛇形填数


    这里写图片描述

    刚开始看感觉很有意思
    猛一看感觉挺简单
    想想有点难
    再仔细想想其实还好

    我是用的边界加是否填过判定的
    然后用了个 flag 标记当前的填充方式

    #include<stdio.h>
    #include<string.h>
    int main() {
        int n;
        int map[120][120];
        while(scanf("%d",&n)!=EOF) {
            memset(map,0,sizeof(map));
            int y=1,x=n,cnt=0;
            int flag=1;
            while(cnt<n*n) {
                map[y][x]=++cnt;
                if(flag==1)
                    y++;
                else if(flag==2)
                    x--;
                else if(flag==3)
                    y--;
                else if(flag==4)
                    x++;
                if(map[y][x]||x<1||x>n||y<1||y>n) {
                    if(flag==1) {
                        y--;
                        x--;
                        flag=2;
                    } else if(flag==2) {
                        x++;
                        y--;
                        flag=3;
                    } else if(flag==3) {
                        y++;
                        x++;
                        flag=4;
                    } else if(flag==4) {
                        x--;
                        y++;
                        flag=1;
                    }
                }
            }
            for(int i=1; i<=n; i++) {
                for(int j=1; j<=n; j++) {
                    printf("%d",map[i][j]);
                    if(j!=n)
                        printf(" ");
                }
                printf("
    ");
            }
        }
        return 0;
    }

    标程思路是循环几圈
    然后通过数学关系直接按照
    下左上右的循环输出
    也是非常巧妙

    #include<stdio.h>
    int main() {
        int a,b,c,d,n,sum=1;
        int yi[101][101];
        scanf("%d",&n);
        for(a=0; a<=(n-1)/2; a++) {
            for(b=a; b<=n-a-1; b++)
                yi[b][n-a-1]=sum++;
            for(b=n-2-a; b>=a; b--)
                yi[n-a-1][b]=sum++;
            for(b=n-a-2; b>=a; b--)
                yi[b][a]=sum++;
            for(b=a+1; b<n-a-1; b++)
                yi[a][b]=sum++;
        }
        for(c=0; c<n; c++) {
            for(d=0; d<n; d++)
                printf("%d ",yi[c][d]);
            printf("
    ");
        }
    }

    题目地址:【NYOJ】[33]蛇形填数

  • 相关阅读:
    ElasticSearch调优问题
    Ceph源码解析:概念
    Ceph神坑系列
    Mac下VirtualBox共享文件夹设置
    API教程
    设计师最常用网站汇总
    从码农到大神,有多少经验值得借鉴?
    登录注册 页面
    NET面试题 (四)
    Sqlserver面试题
  • 原文地址:https://www.cnblogs.com/BoilTask/p/12569903.html
Copyright © 2020-2023  润新知