【NYOJ】[33]蛇形填数

来源:互联网 发布:数据 分析 清洗 工具 编辑:程序博客网 时间:2024/06/03 16:56

这里写图片描述

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

我是用的边界加是否填过判定的
然后用了个 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("\n");        }    }    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("\n");    }}

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

0 0
原创粉丝点击