基础练习 回形取数

问题描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转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
 
思路:以一个circle为循环标记,类似于往里边绕圈的感觉,每绕一圈,要遍历的元素显然越来越少,用四个for循环分别输出左边下边右边上边,不过这四种输出的方式比较难想,以 count < col * row 为循环结束标志即可。
复制代码
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<stdlib.h>
 4 
 5 int main(void)
 6 {
 7     int row, col;
 8     int i, j,k,h;
 9     int** matrix;
10 
11     scanf("%d %d", &row, &col);
12     matrix = (int **)malloc(sizeof(int*) * row);
13     for (i = 0; i < row; i++)
14     {
15         matrix[i] = (int *)malloc(sizeof(int) * col);
16     }
17     for (i = 0; i < row; i++)
18     {
19         for (j = 0; j < col; j++)
20         {
21             scanf("%d", &matrix[i][j]);
22         }
23     }
24 
25     int circle = 0;
26     int count = 0;
27 
28     while (count < row * col)
29     {
30         for (i = circle; i < row - circle && count < row * col; i++) //左边
31         {
32             printf("%d ", matrix[i][circle]);
33             count += 1;
34         }
35         for (j = circle + 1; j < col - circle && count < row * col; j++) //下边
36         {
37             printf("%d ", matrix[row - 1 - circle][j]);
38             count += 1;
39         }
40         for (k = row - 2 - circle; k >= circle && count < row * col; k--) //右边
41         {
42             printf("%d ", matrix[k][col - 1 - circle]);
43             count += 1;
44         }
45         for (h = col - 2 - circle; h >= circle + 1 && count < row * col; h--) //上边
46         {
47             printf("%d ", matrix[circle][h]);
48             count += 1;
49         }
50         circle += 1;
51     }
52     return 0;
53 }
复制代码

 

 
posted @   Xxaj5  阅读(225)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示