C++蓝桥杯 基础练习之回形取数
C++ 蓝桥杯题目讲解汇总(持续更新)
VIP试题 回形取数
资源限制
时间限制: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<iostream>
#include<string.h>
#define N 205using namespace std;int main(){int n,m;cin>>n>>m;int res[N][N]; int a[N][N];for(int i=0;i<n;i++)for(int j=0;j<m;j++) cin>>a[i][j];memset(res,1,sizeof(res));//方法,首先第一个为0,代表走过的,判断下一次要走的方向的格子是否为1,//如果为1,就将下一个格子置为1,对于蛇形来说+1 -1 代表着方向,但是只改变当前的状态,//就会导致存在某一个点最后永远无法到达,因为到了那个点,但是他的下一个位置却是走过的 int i=0,j=0,ct=0;res[0][0]=0;cout<<a[0][0]<<" ";while(ct<n*m-1){while(i<n-1&&res[i+1][j]!=0) {i++;cout<<a[i][j]<<" ";res[i][j]=0;ct++;}while(j<m-1&&res[i][j+1]!=0){j++;cout<<a[i][j]<<" ";res[i][j]=0;ct++;}while(i>-1&&res[i-1][j]!=0&&i-1>=0) {i--;cout<<a[i][j]<<" ";res[i][j]=0;ct++;}while(j>-1&&res[i][j-1]!=0&&j-1>=0){j--;res[i][j]=0;cout<<a[i][j]<<" ";ct++;}}return 0;
}
方案二
判断当前的位置的状态,进而判断是否需要移动,还是下右上左,需要注意是否会多走
#include<iostream>
#include<string.h>
#define N 205
using namespace std;// 下 右 上 左
int main(){int n,m;cin>>n>>m;int a[N][N];int res[N][N];for(int i=0;i<n;i++)for(int j=0;j<m;j++) cin>>a[i][j];// int js=0;
// cout<<js++<<endl;
// js=0;
// cout<<++js<<endl;memset(res,0,sizeof res);int i=0,j=0,ct=0;//从0 0开始移动 while(ct<n*m){while(i<n&&res[i][j]==0) {cout<<a[i][j]<<" ";res[i][j]=1;i++;ct++;}i--;j++;//移动到最下方的时候,i会多移动一下,所以--,除以以外还要手动控制j++,使得向右移动 while(j<m&&res[i][j]==0){cout<<a[i][j]<<" ";res[i][j]=1;j++;ct++;}i--;j--;while(i>-1&&!res[i][j]) {cout<<a[i][j]<<" ";res[i][j]=1;i--;ct++;
// cout<<"###"<<i<<" "<<res[i-1][j]<<endl;}i++;j--;while(j>-1&&!res[i][j]){cout<<a[i][j]<<" ";res[i][j]=1;j--;ct++;}i++;j++;
// cout<<i<<" "<<j<<" "<<endl; }return 0;
}
C++蓝桥杯 基础练习之回形取数相关推荐
- 蓝桥杯-基础练习-特殊回文数
蓝桥杯-基础练习-特殊回文数 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输 ...
- Java实现 蓝桥杯VIP 算法训练 方格取数
问题描述 设有NN的方格图(N<=10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下角的B点 ...
- [蓝桥杯][算法训练VIP]方格取数(双线程dp)
题目描述 设有N * N的方格图(N< =10),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0. 某人从图的左上角的A 点(1,1)出发,可以向下行走,也可以向右走,直到到达右下 ...
- 2022广航蓝桥杯选拔赛压轴题:取数博弈游戏
原题链接 对于这种「判断先手后手的必胜必败」的题目,博弈论方向是一个优先考虑的方向. 博弈论的重要思想就是决策者都要做出全局最优的决策而非局部最优,就好比专业的棋手走一步看五步,而博弈论则要求棋手走一 ...
- 蓝桥杯 基础练习 BASIC-8 回文数 循环 判断 回文数
基础练习 回文数 时间限制:1.0s 内存限制:512.0MB 问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数. 输出格式 按从小到大的顺序输出满足条 ...
- 【c语言】蓝桥杯基础练习 特殊回文数
[问题描述] 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . [输入格式] 输入一行,包含一个正整数 ...
- 蓝桥杯 基础练习 特殊回文数
问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输入一行,包含一个正整数n. 输 ...
- [蓝桥杯]基础练习 特殊回文数
#include<iostream> #include<vector>using namespace std;/* 打印 10000 ~ 1000000里所有回文数及对应各个位 ...
- 蓝桥杯 java基础练习 回形取数
问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...
最新文章
- NC:北京大学吴华君-基因组3D结构调控胚胎干细胞分化
- Ubuntu/CentOs 搭建SVN服务器
- PHP导出Excel环境,php怎么导出excel-使用php导出excel的教程 - 河东软件园
- 一个月按多少天计算日工资合理
- 恐怖地狱火恶魔叉404模板下载
- 今天分享一个做自媒体的方法论
- [导入]在没有 IIS 的条件下运行 ASMX
- python 文件对话框 颜色对话框_PyQt5系列教程(9):颜色、字体、打开文件对话框...
- 【千锋】网络安全笔记(总篇)--- 持续更新
- 点云库PCL学习笔记 -- 输入输出IO -- 6.PCL中记录时间长度TicToc 类和系统Time 类
- 腾讯程序员不寻常的三年
- 如何让PPT给你的presentation加分
- 成熟男人与24岁女孩精彩对白 —非常感动
- 有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量为0.00001,第二个里面放2粒,第三个里面放4,第四个8 ,以此类推,棋盘上放的所有芝麻的重量?
- QQ、微信消息定时发送/自动发送【支持发送文件】
- Editplus下载安装
- 软件测试:购买商品类测试不可忽略的问题
- java socket 打印机_思普瑞特,小票打印机和标签打印机java网络驱动设计与实现...
- layui内置模块(element常用元素操作)
- 服务器常见错误代码500、501、502、503、504、505