顺时针打印矩阵
2013-03-18 08:53
225 查看
何海涛:《剑指Offer:名企面试官精讲典型编程题》:九度OJ
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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)。
输出:
对应每个测试案例,输出一行,
按照从外向里以顺时针的顺序依次打印出每一个数字,每个数字后面都有一个空格。
样例输入:
样例输出:
代码AC:
思想:这题没什么算法,控制好边界就可以了~
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:
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
代码AC:
思想:这题没什么算法,控制好边界就可以了~
#include <stdio.h> typedef struct mat { int num; int flag; }mat; int main() { mat ma[1000][1000]; int i, j, m, n, dir, count; while( scanf("%d%d", &m, &n) != EOF ) { for( i = 0; i < m; i++ ) { for( j = 0; j < n; j++ ) { scanf("%d", &ma[i][j].num); ma[i][j].flag = 0; } } dir = 0; // 左 - 下 - 右 - 上 循环 count = 0; i = 0; j = 0; while( count < n * m ) { switch( dir ) { case 0: if( j < n ) { if( !ma[i][j].flag ) { printf("%d ", ma[i][j].num); ma[i][j].flag = 1; count++; j++; } else { j--; i++; dir += 1; dir %= 4; } } else { j--; i++; dir += 1; dir %= 4; } break; case 1: if( i < m ) { if( !ma[i][j].flag ) { printf("%d ", ma[i][j].num); ma[i][j].flag = 1; count++; i++; } else { i--; j--; dir += 1; dir %= 4; } } else { i--; j--; dir += 1; dir %= 4; } break; case 2: if( j >= 0 ) { if( !ma[i][j].flag ) { printf("%d ", ma[i][j].num); ma[i][j].flag = 1; count++; j--; } else { j++; i--; dir += 1; dir %= 4; } } else { j++; i--; dir += 1; dir %= 4; } break; case 3: if( i >= 0 ) { if( !ma[i][j].flag ) { printf("%d ", ma[i][j].num); ma[i][j].flag = 1; count++; i--; } else { i++; j++; dir += 1; dir %= 4; } } else { i++; j++; dir += 1; dir %= 4; } break; } } printf("\n"); } return 0; }
相关文章推荐
- 由外向里顺时针打印矩阵元素
- 剑指offer--面试题29:顺时针打印矩阵
- 面试题40:顺时针打印矩阵
- 20、顺时针打印矩阵
- 剑指Offer----面试题20:顺时针打印矩阵
- java面试题:顺时针打印矩阵
- java 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,
- 剑指offer-4-面试题20:顺时针打印矩阵(画图使抽象问题形象化)
- 顺时针打印矩阵
- 顺时针打印矩阵
- 二叉树的镜像||顺时针打印矩阵
- 剑指offer-面试题 20:顺时针打印矩阵
- Q20:顺时针打印矩阵
- 剑指offer-顺时针打印矩阵
- 顺时针打印矩阵
- 面试题20:顺时针打印矩阵
- 顺时针打印矩阵
- 【追求进步】顺时针打印矩阵【继续理解】
- 顺时针打印矩阵 (JAVA实现)
- 九度 题目1391:顺时针打印矩阵