【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
- NYOJ 33 蛇形填数
- NYoj 33 蛇形填数
- NYOJ-33 蛇形填数
- NYOJ 33 蛇形填数
- NYOJ-蛇形填数-33
- NYOJ 蛇形填数 33
- NYOJ 33-蛇形填数
- NYOJ-33 蛇形填数
- NYOJ 33 蛇形填数
- NYOJ 33 蛇形填数
- NYOJ-33蛇形填数
- NYOJ 33 蛇形填数
- NYOJ-33-蛇形填数
- nyoj 33 蛇形填数
- nyoj 33 蛇形填数
- NYOJ-33 蛇形填数
- NYOJ 33 蛇形填数
- NYOJ 33 蛇形填数
- 千峰Android_Day03
- TFTP笔记
- sortStringText
- 0919学习笔记
- 笔记:《高效能人士的七个习惯》第九章 习惯六 统合综效——创造性合作的原则
- 【NYOJ】[33]蛇形填数
- ubuntu14 java-mysql-tomcat
- [HTML] 块级元素与行级元素
- 1.1.2. 了解JVM各种参数及调优
- searchStringText
- Combination Sum
- 4.DTD - 元素 - 属性
- JAVA多线程学习之ReentrantReadWriteLock
- 多线程之NSThread的三种创建方式