蛇形填数
来源:互联网 发布:linux内核启动 编辑:程序博客网 时间:2024/06/10 19:37
唉!
晒网晒了三天了吧,打渔吧 - -!
师父放假过他自己私生活去了,不忍打扰啊 - -!
自己写的代码和书上的差距还是很大的 啊
蛇形填数啊
题在书上粘不过来哈哈
哈哈,补上
例3-2蛇形填数。
在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≤8。
【分析】
与数学的矩相比,可以用一个所谓的二维数组来存储题目中的方阵。只需声明一个int a[MAXN][MAXN],就可以获得一个大小为MAXN×MAXN的方阵。在声明时,两维的大小不必相同。
自己的糙代码:
#include<stdio.h>int main(){int n,a[10][10],i,j,k,m;while(scanf("%d",&n)!=EOF){k=1,j=n-1;for(m=0;m<=n/2-1;++m){ for(i=m;i<=n-m-2;++i) {a[i][j]=k; ++k; } for(j=i;j>=m+1;--j) {a[i][j]=k; ++k; } for(;i>=m+1;--i) {a[i][j]=k; ++k; } for(;j<=n-m-2;++j) {a[i][j]=k; ++k; } j-=1;} if(n%2==1) a[n/2][n/2]=k;for(i=0;i<n;++i){for(j=0;j<n;++j)printf("%6d",a[i][j]);printf("\n");}}return 0;}
书上给的:
#include<stdio.h>#include<string.h>#define MAXN 10int a[MAXN][MAXN];int main(){ int n, x, y, tot = 0; scanf("%d", &n); memset(a, 0, sizeof(a)); tot = a[x=0][y=n-1] = 1; while(tot < n*n) { while(x+1<n && !a[x+1][y]) a[++x][y] = ++tot; while(y-1>=0 && !a[x][y-1]) a[x][--y] = ++tot; while(x-1>=0 && !a[x-1][y]) a[--x][y] = ++tot; while(y+1<n && !a[x][y+1]) a[x][++y] = ++tot; } for(x = 0; x < n; x++) { for(y = 0; y < n; y++) printf("%3d", a[x][y]); printf("\n"); } return 0;}
学到了什么:
1.比较大的数组应尽量声明在main函数外;
2.数组清零
memset(a,0,sizeof(a));
3.简洁而不牺牲可读性
tot = a[x=0][y=n-1] = 1;
4.唉,善用宏定义吗
#define MAXN 10
5. a[x+1][y]==0 简写成 !a[x+1][y]
就这样吧
改天再说
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- C++对象析构后调用虚方法和普通方法的区别
- SQLite入门
- 编译tomcat及常见问题
- Shanghai 2004 Preliminary
- ubantu 安装mysql,以及mysql的启动,关闭,重启,以及远程访问设置
- 蛇形填数
- ckeditor
- hibernate_Restrictions用法
- 如何向SqlServer的文本字段中写入回车符 换行符 单引号
- Configure Hotspot on MAC
- Record network traffic on Android or IOS with Charlies' Proxy or WireShark
- JSON格式化JS代码,改变
- John W.Backus
- js中有关IE版本检测