蛇形填充数组
2016-07-13 20:37
197 查看
http://noi.openjudge.cn/ch0108/24/
总时间限制: 1000ms 内存限制: 65536kB描述
用数字1,2,3,4,...,n*n这n2个数蛇形填充规模为n*n的方阵。
蛇形填充方法为:
对于每一条左下-右上的斜线,从左上到右下依次编号1,2,...,2n-1;按编号从小到大的顺序,将数字从小到大填入各条斜线,其中编号为奇数的从左下向右上填写,编号为偶数的从右上到左下填写。
比如n=4时,方阵填充为如下形式:
输入输入一个不大于10的正整数n,表示方阵的行数。输出输出该方阵,相邻两个元素之间用单个空格间隔。样例输入
样例输出
分析:这个题目要注意看输入输出案例当中蛇形数组的排列顺序,按题目的意思来操作。
这里把方阵分成左上三角(包括主对角线)和右下三角两个部分分别处理。
上三角部分斜排数等于n,为了便于处理,斜排序列k从0~(n-1)。
下三角部分斜排数是n-1,斜排序列k从1到n-1.
对上三角而已,k为偶数时,斜排从小网上走;当k为奇数时刚好相反。
但是要注意:下三角斜排的方向不能这样确定。当n的奇偶性不同的时候,上三角末尾斜排的方向也不一样,导致了下三角起始斜排的方向不同。这里用一个flag变量来标识下三角起始斜排的方向。
其实,可以完全由flag变量控制上三角和下三角各个斜排的方向。(也就是说上三角部分的斜排也用flag来控制就好了。不过我是懒得改写了呵呵)
总时间限制: 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
分析:这个题目要注意看输入输出案例当中蛇形数组的排列顺序,按题目的意思来操作。
这里把方阵分成左上三角(包括主对角线)和右下三角两个部分分别处理。
上三角部分斜排数等于n,为了便于处理,斜排序列k从0~(n-1)。
下三角部分斜排数是n-1,斜排序列k从1到n-1.
对上三角而已,k为偶数时,斜排从小网上走;当k为奇数时刚好相反。
但是要注意:下三角斜排的方向不能这样确定。当n的奇偶性不同的时候,上三角末尾斜排的方向也不一样,导致了下三角起始斜排的方向不同。这里用一个flag变量来标识下三角起始斜排的方向。
#include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { int n,i,j,t; int **a; int k; int flag; scanf("%d",&n); a=(int **)malloc(sizeof(int*)*n); for(i=0;i<n;i++) a[i]=(int *)malloc(sizeof(int)*n); t=0; for(k=0;k<n;k++)//填充左上三角部分(包括主对角线) { if((k&1)==0)//第奇数个斜排,从左下往右上扫描填充 { i=k; j=0; for(;i>=0;i--,j++) { t++; a[i][j]=t; } } else//第偶数个斜排,从右上往左下扫描填充 { i=0; j=k; for(;j>=0;i++,j--) { t++; a[i][j]=t; } } } if((n&1)==0) //flag等于0或1决定了右下三角部分第一个斜排的方向 flag=1; else flag=0; for(k=1;k<n;k++)//右下三角部分(不包括主对角线) { if(flag==1)//从左下往右上扫描填充 { i=n-1; j=k; for(;j<n;j++,i--) { t++; a[i][j]=t; } flag=0; } else//从右上往左下扫描填充 { i=k; j=n-1; for(;i<n;i++,j--) { t++; a[i][j]=t; } flag=1; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n"); } return 0; }
其实,可以完全由flag变量控制上三角和下三角各个斜排的方向。(也就是说上三角部分的斜排也用flag来控制就好了。不过我是懒得改写了呵呵)
相关文章推荐
- POJ 2417 Discrete Logging(BSGS算法,gcd(a,p)=1)
- leetcode 344 Reverse String
- iOS基础:正则表达式对象
- HDU 1004 Let the Balloon Rise
- 图像数据在ITK和VTK之间转换
- UWP MD5加密
- html select
- CSUOJ 1284 Cutting Cake(递推)
- ios developer tiny share-20160713
- ios developer tiny share-20160713
- 处理iPhone 6s plus/iPad 横屏启动App界面布局错乱问题
- RecyclerView
- 相机抖动
- 开始node之旅
- Android多线程断点续传
- 第3章 操作符
- UVA1619 感觉不错
- 解决mysql删除出现Errors were encountered while processing: mysql-server-5.6的问题
- TOMCAT win7下报错 错误信息为Unable to establish loopback connection
- cin、cin.get()、cin.getline()、getline()、gets()等