基础练习 回形取数
Posted 新生代黑马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础练习 回形取数相关的知识,希望对你有一定的参考价值。
问题描述
回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
输入格式
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出格式
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3 1 2 3 4 5 6 7 8 9
样例输出
1 4 7 8 9 6 3 2 5
样例输入
3 2 1 2 3 4 5 6
样例输出
1 3 5 6 4 2
锦囊1
循环,标记。
锦囊2
使用多次循环来处理,也可以对取过的数标记来简化循环的判断。
测试代码
1 #include<stdio.h> 2 3 int main() 4 { 5 int m, n, tot = -1, i, j, x = -1, y = 0; 6 int a[200][200]; 7 8 scanf("%d%d", &m, &n); 9 10 for (i = 0; i < m; i++) 11 { 12 for (j = 0; j < n; j++) 13 { 14 scanf("%d", &a[i][j]); 15 } 16 } 17 18 while (tot < m * n) 19 { 20 while (x + 1 < m && a[x + 1][y] != -1) 21 { 22 printf("%d ", a[++x][y]); 23 a[x][y] = -1; 24 tot++; 25 } 26 while (y + 1 < n && a[x][y + 1] != -1) 27 { 28 printf("%d ", a[x][++y]); 29 a[x][y] = -1; 30 tot++; 31 } 32 while (x - 1 >= 0 && a[x - 1][y] != -1) 33 { 34 printf("%d ", a[--x][y]); 35 a[x][y] = -1; 36 tot++; 37 } 38 while (y - 1 >= 0 && a[x][y - 1] != -1) 39 { 40 printf("%d ", a[x][--y]); 41 a[x][y] = -1; 42 tot++; 43 } 44 } 45 return 0; 46 }
以上是关于基础练习 回形取数的主要内容,如果未能解决你的问题,请参考以下文章