九度OJ-题目1391:顺时针打印矩阵
2015-06-05 11:50
239 查看
题目链接地址:
九度OJ-题目1391:顺时针打印矩阵
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。
接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。
输出:
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
样例输入:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
解题思路:
设立4个变量up,down,left,right分别对应打印矩阵的上,下,左,右4个边界,顺时针打印矩阵分为以下4步:
(1) 从左至右打印矩阵的第up行,打印完以后令up++,表示该行元素已经被打印完;
(2) 从上至下打印矩阵的第right列,打印完以后令right--,表示该列元素已经被打印完;
(3) 从右至左打印矩阵的第down行,打印完以后令down--,表示该行元素已经被打印完;
(4) 从下至上打印矩阵的第left列,打印完以后令left++,表示该列元素已经被打印完。
重复以上4个步骤,直至矩阵中所有的元素都被打印完为止。
AC代码如下:
九度OJ-题目1391:顺时针打印矩阵
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行包括两个整数m和n(1<=m,n<=1000):表示矩阵的维数为m行n列。
接下来的m行,每行包括n个整数,表示矩阵的元素,其中每个元素a的取值范围为(1<=a<=10000)。
输出:
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
样例输入:
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
样例输出:
1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
解题思路:
设立4个变量up,down,left,right分别对应打印矩阵的上,下,左,右4个边界,顺时针打印矩阵分为以下4步:
(1) 从左至右打印矩阵的第up行,打印完以后令up++,表示该行元素已经被打印完;
(2) 从上至下打印矩阵的第right列,打印完以后令right--,表示该列元素已经被打印完;
(3) 从右至左打印矩阵的第down行,打印完以后令down--,表示该行元素已经被打印完;
(4) 从下至上打印矩阵的第left列,打印完以后令left++,表示该列元素已经被打印完。
重复以上4个步骤,直至矩阵中所有的元素都被打印完为止。
AC代码如下:
// 顺时针方向打印矩阵 #include<stdio.h> #define MAX 1000 int matrix[MAX][MAX]; /** * 输入矩阵 * @param m 矩阵的行数 * @param n 矩阵的列数 * @return void */ void inputMatrix(int m,int n) { int i,j; for(i = 0;i < m;i++) { for(j = 0;j < n;j++) { scanf("%d",&matrix[i][j]); } } return; } /** * 顺时针输出矩阵 注意最后一个元素后面也要输出空格 * @param m 矩阵的行数 * @param n 矩阵的列数 * @return void */ void clockwisePrintMatrix(int m,int n) { int i,j; int up,down,left,right; // 上,下,左,右 边界 up = 0,down = m - 1; left = 0,right = n - 1; // 从matrix[0][1]开始遍历 while(1) { // 从左往右遍历 i = up; for(j = left;j <= right;j++) { printf("%d ",matrix[i][j]); } if(up < down) { up++; // 表示第up行的元素已经遍历完了 } else // 表示已经遍历到了最后一个元素 { break; } // 从上往下遍历 j = right; for(i = up;i <= down;i++) { printf("%d ",matrix[i][j]); } if(right > left) { right--; // 表示第right列的元素已经遍历完了 } else // 表示已经遍历到了最后一个元素 { break; } // 从右往左遍历 i = down; for(j = right;j >= left;j--) { printf("%d ",matrix[i][j]); } if(down > up) { down--; // 表示第down行的元素已经遍历完了 } else // 表示已经遍历到了最后一个元素 { break; } // 从下往上遍历 j = left; for(i = down;i >= up;i--) { printf("%d ",matrix[i][j]); } if(left < right) { left++; // 表示第left列的元素已经遍历完了 } else // 表示已经遍历到了最后一个元素 { break; } }//while(1) printf("\n"); return; } int main() { int m,n; while(EOF != scanf("%d%d",&m,&n)) { inputMatrix(m,n); clockwisePrintMatrix(m,n); } return 0; } /************************************************************** Problem: 1391 User: blueshell Language: C Result: Accepted Time:540 ms Memory:4820 kb ****************************************************************/
相关文章推荐
- 第3章 15
- 获取root权限及破解原理分析
- Android 平台下使用 i2c-tools
- 开源集合-最火的Android开源项目(二)
- C++生成54个不同的随机数
- Openwrt 移植hello world
- jquery插件NProgress.js制作网页加载进度条
- JavaScript中toString()方法的使用详解
- Hadoop问题汇总
- 第三章第43题
- [Java Swing 大富翁]Java常用的文件、图片、音频 ===通用工具类
- 【css】ie6 和 ie7 下 position 与 overflow 的问题
- linux 关闭防火墙。
- 欧拉路 小结(POJ 2337 为例子)
- 【css】ie6 和 ie7 下 position 与 overflow 的问题
- KVM部署及硬件参数更改
- iPhone:动态获取UILabel的高度和宽度
- SQL Server 修改表字段
- maven3常用命令
- 程序猿写的程序将如何打包成安装包(最简单)