试题 基础练习 回形取数 C/C++
资源限制 时间限制:1.0s 内存限制:512.0MB
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
提交代码
# include <stdio.h> int main() { int n,m,i,j,count,t; scanf("%d %d",&n,&m); count = n*m; int a[n][m]; for(i = 0;i < n;i++) for(j = 0;j < m;j++) scanf("%d",&a[i][j]); t = 0;//用于记录圈数 i = 0; j = 0; while(count) { while(i < n-t && count) { if(i==0&&j==0) { printf("%d",a[0][0]); i++; } else printf(" %d",a[i++][j]); count--; } i--; j++; while(j < m-t && count) { printf(" %d",a[i--][j]); count--; } i++; j--; whlie(j > t&&count) { printf(" %d",a[i][j--]); count--; } j++; i++; t++; } return 0; }
下一篇:
贪心算法(求最优解)