问题标题: 酷町堂:老师真的太为难我了,采纳时加到100酷町豆!

0
0
已解决
董宇昊
董宇昊
初级启示者
初级启示者

唉~作业来一个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追加了内容

@赵泰来


0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

搜索也可以解决蛇形填数问题

0
董宇昊
董宇昊
初级启示者
初级启示者

路过的大佬看一看呀!

给了思路吧!!

0
王子健
王子健
初级天翼
初级天翼

你是什么班?你又没学到算法还在这BB,加我QQ:1708262261

给你思路 (采纳必须加到100)

王子健在2020-08-14 18:22:25追加了内容

模拟螺旋形的方向,while套while,理解后好写多了

王子健在2020-08-14 18:24:17追加了内容

蛇形填数的思路会吗,套就行了

0
张岳恒
张岳恒
资深光能
资深光能

嘤,我答案对的但输出换行不对

0
0
0
陈振轩
陈振轩
高级光能
高级光能

首先输入二维数组,之后用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;
    }

 

0
陈曦
陈曦
资深天翼
资深天翼

这是作业,你可以看回放

0
我要回答