初级启示者
唉~作业来一个5分题,这让人怎么活!!
——————————————————————————————————————
1742 生日游戏经验值:0
题目描述 Description
明天是小伟的生日,他想设计一个游戏可以和小伙伴们一起玩。
小伟家的房间是个n * m的矩阵,房间地上铺满了1 * 1的地砖,每块砖上都有一个数字。
墙墙是小伟的好朋友,墙墙喜欢螺旋形,他觉得按照顺时针螺旋形的依次走过每块地砖会很有趣,小伟不喜欢重复,他不愿意经过同一块地砖第二次。所以他们定下了按照以下规则来走过地砖:
① 从第一行第一列的地砖开始,初始方向是向右。
② 当他走到一块砖上,如果他下一步不能往前(继续往前会走到一块已经走过的地砖 或者 继续往前会撞到墙上)的时候,向右转。
输入描述 Input Description
第一行:整数n,m,分别表示房间的长和宽。
接下来是一个 n * m 的矩阵,表示房间的地砖上的数字
输出描述 Output Description
输出共 n 行,每行 m 个整数。
你需要依次输出从第一行第一块砖开始走,他所遍历的地砖上的数字。
样例输入 Sample Input
3 4 1 2 3 4 5 6 7 8 9 10 11 12
样例输出 Sample Output
1 2 3 4 8 12 11 10 9 5 6 7
数据范围及提示 Data Size & Hint
注意:砖上的数字可能会重复
1 <= n,m <= 1000
董宇昊在2020-08-14 18:08:05追加了内容
h
董宇昊在2020-08-15 10:19:09追加了内容
#include <iostream>
using namespace std;
int a[105][105],b[1005];
int main() {
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
int cnt=0,x=1,y=0;
while(cnt<n*m){
while(y<m&&a[x][y+1]!=0){
b[++cnt]=a[x][++y];
a[x][y]=0;
}
while(x<n&&a[x+1][y]!=0){
b[++cnt]=a[++x][y];
a[x][y]=0;
}
while(y>1&&a[x][y-1]!=0){
b[++cnt]=a[x][--y];
a[x][y]=0;
}
while(x>1&&a[x-1][y]!=0){
b[++cnt]=a[--x][y];
a[x][y]=0;
}
}
for(int i=1;i<=cnt;i++){
cout<<b[i]<<' ';
if(i%m==0){
cout<<endl;
}
}
return 0;
}
50分!
董宇昊在2020-08-15 10:19:59追加了内容
@赵泰来
初级天翼
你是什么班?你又没学到算法还在这BB,加我QQ:1708262261
给你思路 (采纳必须加到100)
王子健在2020-08-14 18:22:25追加了内容
模拟螺旋形的方向,while套while,理解后好写多了
王子健在2020-08-14 18:24:17追加了内容
蛇形填数的思路会吗,套就行了
高级光能
首先输入二维数组,之后用b一维数组存a数组里的东西,(蛇形填数相同的方法遍历a数组,只是把最后一个for移到了第一个),之后输出B数组,输出方法如下
for (int i = 1; i <= m * n; i++) {
cout << b[i] << " ";
if (i / n >= 1 && i % n == 0)
cout << endl;
}