蛇形填充数组
2016-07-13 23:17
337 查看
总时间限制:
1000ms
内存限制:
65536kB
描述用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式:
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
输入输入一个不大于10的正整数n,表示方阵的行数。
输出输出该方阵,相邻两个元素之间用单个空格间隔。
样例输入
4
样例输出
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
#include<stdlib.h> #include<stdio.h> int A[100][100]; int row = 0, cro = 0;//当前位置 int mark = 1;//偶数向上,奇数向下 void que(int n) { int j = n*n; for (int i = 1; i <=j; i++) { if (mark % 2 == 1)//奇数向上 { if (row < 0 && cro>0 && cro < n)//上边出界 { row = 0; A[row][cro] = i; mark++; row += 1; cro -= 1; } else if (row < 0 && cro >= n)//右上顶点出界 { row = 1; cro = n - 1; A[row][cro] = i; mark++; row += 1; cro -= 1; } else if(row >= 0 && row < n-1&&cro >= n)//右边出界 { row += 2; cro = n - 1; A[row][cro] = i; mark++; row += 1; cro -= 1; } else //无出界 { A[row][cro] = i; row -= 1; cro += 1; } } else //偶数向下 { if (row > 0 && row < n&&cro < 0)//左边出界 { cro = 0; A[row][cro] = i; mark++; row -= 1; cro += 1; } else if (row >= n&&cro < 0)//左下顶点出界 { row = n - 1; cro = 1; A[row][cro] = i; mark++; row -= 1; cro += 1; } else if (row >= n&&cro >= 0 && cro < n - 1)//下边出界 { row = n - 1; cro += 2; A[row][cro] = i; mark++; row -= 1; cro += 1; } else //无出界 { A[row][cro] = i; row += 1; cro -= 1; } } } } void main() { int n; scanf("%d", &n); que(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%d ", A[i][j]); } printf("\n"); } }
相关文章推荐
- 逆波兰表达式(基本算法之递归和自调用函数)
- poj 前缀中的周期
- opj 多项式加法
- OPJ---7830:求小数的某一位
- 贪心----书架
- windows和linux双系统删除linux
- 文件压缩(平台Linux & 语言C++)
- Linux 之Cut命令详解
- CentOS中vsftp安装、配置、卸载
- ubuntu15.10下安装hadoop2.7.2
- tomcat和apache的结合 看最重要的 文档有点乱
- tomcat和apache的结合 看最重要的 文档有点乱
- percona监控模板图形解释
- dedecms xss 0day通杀所有版本 可getshell
- opencv 图像锐化
- docker 初识
- [OpenGL] 利用精灵表制作动画
- Docker网络方案初探
- SecureCRT不能连接linux服务器
- Linux多台主机批量执行命令