动不了一点 2024-03-18 11:16 采纳率: 17.2%
浏览 7

请帮我看下第一个代码和第二个有什么不同,输出不一样

请帮我看下第一个代码和第二个有什么不同,输出不一样

#include "iostream"
#include "queue"
using namespace std;
char map[32][32][32];
int bookmap1[32][32][32];
int next1[6][3] = { {0,1,0},{0,-1,0},{0,0,1},{0,0,-1},{1,0,0},{-1,0,0} };
int l, r, c;
int temp = 0;
struct point {
    int z;
    int x;
    int y;
    int step;
};
int main() {
    queue<point> q;
    cin >> l >> r >> c;
    while (1) {
        if (l == 0 && r == 0 && c == 0)break;
        for (int i = 0; i < l; i++, temp++) {
            {
                for (int j = 0; j < r; j++)
                    for (int z = 0; z < c; z++)
                    {
                        cin >> map[temp][j][z];
                        if (map[temp][j][z] == 'S')
                        {
                            q.push({ temp,j,z,0 });
                            map[temp][j][z] = '#';
                        }
                    }
                
            }
        }
        while (!q.empty()) {
            point t = q.front();
            q.pop();
            for (int i = 0; i < 6; i++) {
                int tz = t.x + next1[i][0];
                int tx = t.y + next1[i][1];
                int ty = t.z + next1[i][2];
                if (tz < 0 || tz >= l || tx < 0 || tx >= r || ty < 0 || ty >= c || map[tz][tx][ty] == '#' || bookmap1[tx][ty][tz] == 1)continue;
                if (map[tz][tx][ty] == '.') {
                    q.push(point{ tz,tx,ty,t.step + 1 });
                    bookmap1[tz][tx][ty] = 1;
                    break;
                }
                if (map[tz][tx][ty] == 'E')
                {
                    printf("Escaped in %d minute(s).\n", t.step + 1);
                    while (!q.empty()) q.pop(); // 4. 退出循环
                    break;
                    
                }
            }

        }
        cout << "111";
        cin >> l >> r >> c;
    }

    return 0;
}

img

#include <iostream>
#include <queue>
using namespace std;

char map[32][32][32];
int bookmap1[32][32][32];
int next1[6][3] = { {0,1,0},{0,-1,0},{0,0,1},{0,0,-1},{1,0,0},{-1,0,0} };
int l, r, c;
int temp = 0;

struct point {
    int z;
    int x;
    int y;
    int step;
};

int main() {
    queue<point> q;
    cin >> l >> r >> c;
    while (l != 0 && r != 0 && c != 0) { // 1. 修改终止条件
        for (int i = 0; i < l; i++, temp++) {
            for (int j = 0; j < r; j++) {
                for (int z = 0; z < c; z++) {
                    cin >> map[temp][j][z];
                    if (map[temp][j][z] == 'S') {
                        q.push({ temp, j, z, 0 });
                        map[temp][j][z] = '#';
                    }
                }
            }
        }
        while (!q.empty()) {
            point t = q.front();
            q.pop();
            for (int i = 0; i < 6; i++) {
                int tz = t.z + next1[i][0]; // 2. 修改越界条件
                int tx = t.x + next1[i][1];
                int ty = t.y + next1[i][2];
                if (tz < 0 || tz >= l || tx < 0 || tx >= r || ty < 0 || ty >= c || map[tz][tx][ty] == '#' || bookmap1[tz][tx][ty] == 1)
                    continue;
                switch (map[tz][tx][ty]) { // 3. 使用switch语句判断
                case '.':
                    q.push(point{ tz, tx, ty, t.step + 1 });
                    bookmap1[tz][tx][ty] = 1;
                    break;
                case 'E':
                    printf("Escaped in %d minute(s).\n", t.step + 1);
                    while (!q.empty()) q.pop(); // 4. 退出循环
                    break;
                }
            }
        }

        // 5. 重置bookmap1数组和temp变量
        for (int i = 0; i < l; i++) {
            for (int j = 0; j < r; j++) {
                for (int z = 0; z < c; z++) {
                    bookmap1[i][j][z] = 0;
                }
            }
        }
        temp = 0;

        cin >> l >> r >> c;
    }

    return 0;
}

img

  • 写回答

3条回答 默认 最新

  • 关注

    动不了一点 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    第一个代码和第二个代码的不同之处是:

    1. 终止条件不同:第一个代码使用了无限循环,通过判断输入的l、r、c是否都为0来退出循环;而第二个代码使用while循环,当l、r、c同时不为0时继续执行。

    2. 越界条件不同:在第一个代码中,判断tz是否越界时使用了tz < 0 || tz >= l,即在tz小于0或者大于等于l时判断越界;而在第二个代码中,判断tz是否越界时使用了tz >= 0 && tz < l,即在tz大于等于0并且小于l时判断不越界。同样的修改也应用到tx和ty的越界判断上。

    3. 判断字符不同:在第一个代码中,通过if语句判断字符类型,没有使用switch语句;而在第二个代码中,通过switch语句判断字符类型。

    4. 退出循环的操作不同:在第一个代码中,在找到'E'后通过break语句退出循环;而在第二个代码中,在找到'E'后使用printf语句输出,并通过while循环将队列q清空。

    5. 重置bookmap1数组和temp变量:在第二个代码中,在每次输入新的l、r、c之前,需要对bookmap1数组进行重置,将所有元素设为0;也需要重置temp变量为0。

    综上所述,两个代码的区别主要体现在终止条件、越界条件、判断字符、退出循环的操作以及重置数组和变量等方面。

    修改后的第二个代码如下所示:

    #include <iostream>
    #include <queue>
    using namespace std;
    
    char map[32][32][32];
    int bookmap1[32][32][32];
    int next1[6][3] = { {0,1,0},{0,-1,0},{0,0,1},{0,0,-1},{1,0,0},{-1,0,0} };
    int l, r, c;
    int temp = 0;
    
    struct point {
        int z;
        int x;
        int y;
        int step;
    };
    
    int main() {
        queue<point> q;
        cin >> l >> r >> c;
        while (l != 0 && r != 0 && c != 0) { // 修改终止条件
            for (int i = 0; i < l; i++, temp++) {
                for (int j = 0; j < r; j++) {
                    for (int z = 0; z < c; z++) {
                        cin >> map[temp][j][z];
                        if (map[temp][j][z] == 'S') {
                            q.push({ temp, j, z, 0 });
                            map[temp][j][z] = '#';
                        }
                    }
                }
            }
            while (!q.empty()) {
                point t = q.front();
                q.pop();
                for (int i = 0; i < 6; i++) {
                    int tz = t.z + next1[i][0]; // 修改越界条件
                    int tx = t.x + next1[i][1];
                    int ty = t.y + next1[i][2];
                    if (tz < 0 || tz >= l || tx < 0 || tx >= r || ty < 0 || ty >= c || map[tz][tx][ty] == '#' || bookmap1[tz][tx][ty] == 1)
                        continue;
                    switch (map[tz][tx][ty]) { // 使用switch语句判断字符
                    case '.':
                        q.push(point{ tz, tx, ty, t.step + 1 });
                        bookmap1[tz][tx][ty] = 1;
                        break;
                    case 'E':
                        printf("Escaped in %d minute(s).\n", t.step + 1);
                        while (!q.empty()) q.pop(); // 退出循环
                        break;
                    }
                }
            }
    
            // 重置bookmap1数组和temp变量
            for (int i = 0; i < l; i++) {
                for (int j = 0; j < r; j++) {
                    for (int z = 0; z < c; z++) {
                        bookmap1[i][j][z] = 0;
                    }
                }
            }
            temp = 0;
    
            cin >> l >> r >> c;
        }
    
        return 0;
    }
    

    希望对你有帮助!

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)
  • ¥30 python,LLM 文本提炼