原题链接:蓝桥杯基础练习VIP-回形取数
解题思路:
判断边界不用||分隔的行列坐标。在输入的矩形外面加一层外框,全部置-1,判断当前移动前方是-1则回退一步,左转。
当前走过的位置赋值-1。
行方向前进增量-1开始,列前进增量1开始。之后每次行前进完,列前进方向取反;列前进完行前进方向取反。行,列方向各前进一次为一轮。一轮都没有前进则退出循环。
优化外框只需要3个关键位置置为-1。
参考代码:
#include <stdio.h> #define N 202 int main() { int a[N][N]={0}; int m,n; int flag=0,x=1,y=1,c=1; int incy=-1,incx=1; scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]); a[m+1][1]= -1; a[m][n+1]= -1; a[0][n]= -1; while(c){ c=0; while(a[x][y]!=-1){ if(x!=1||y!=1) printf(" "); printf("%d",a[x][y]); a[x][y]=-1; x+=incx; c=1; } if(c==0) break; x-=incx; incy=-incy; y+=incy; while(a[x][y]!=-1){ printf(" %d",a[x][y]); a[x][y]=-1; y+=incy; c=2; } y-=incy; incx=-incx; x+=incx; } }
0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复