别弄里面啊笨蛋 2018-10-29 08:12 采纳率: 75%
浏览 422
已采纳

C++萌新请大佬帮忙解答

具体问题如下:
室内平面图设计程序
1)用户输入房间的长度和宽度,门、窗、家具的位置。放置规则:窗户和门必须在墙上且不能再拐角,窗户不能紧靠门,家具必须在室内且不能堵门。不合规则要提示重新输入;
2)根据上述参数绘制房间图样,墙用'#'表示,门用空格表示,窗户用'|'或'-'表示(前者在竖墙上,后者在横墙上),家具用'*'表示。
###-######

*

##########
这是一个10x7的房间,左上角坐标为(0,0),门在(9,2),窗在(3,0),家具在(2,4)

本人只能写到第1部分结束orz,实在不会写后面的,请大佬解答(目前只学到了函数的一点点,尽量不要用太高级的写法,写得好私戳我给红包)(示意图有误,大致理解即可)

  • 写回答

1条回答 默认 最新

  • Italink 2018-10-29 08:19
    关注

    图片说明

    #include<iostream>
    using namespace std;
    int main(){
        int length, width;
        cout << "输入房间长度和宽度(以空格分隔,下同):";
        cin >> length >> width;
        char room[100][100];
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < length; j++) {
                if (i == 0 || i == width - 1 || j == 0 || j == length - 1)
                    room[i][j] = '#';
                else
                    room[i][j] = ' ';
            }
        }
        int x, y;
        cout << "输入门的坐标:";
        cin >> x >> y;
        while (room[y][x]!='#' || ((x == 0 || x == length - 1) && (y == 0 || y == width - 1))) {
            cout << "门必须在墙上且不能再拐角,请重新输入:";
            cin >> x >> y;
        }
        int doorx = x, doory = y;
        room[y][x] = ' ';
        cout << "输入窗户的坐标:";
        cin >> x >> y;
        while (room[y][x] != '#' || ((x == 0 || x == length - 1) && (y == 0 || y == width - 1)) ||((x==0||x==length-1)&&(room[y-1][x]==' '||room[y+1][x]==' '))|| (y == 0 || y == width - 1) && (room[y][x+1] == ' ' || room[y][x-1] == ' ')) {
            cout << "窗户必须在墙上且不能再拐角,且不能紧靠门,请重新输入:";
            cin >> x >> y;
        }
        if (x == 0 || length == length - 1) 
            room[y][x] = '|';
        else
            room[y][x] = '-';
    
        cout << "输入家具的坐标:";
        cin >> x >> y;
        while (!(0<x&&x<length&&0<y&&y<width)||(y==doory&&abs(x-doorx)==1)||(x==doorx&&abs(y-doory)==1)) {
            cout << "家具必须在室内,且不能堵门,请重新输入:";
            cin >> x >> y;
        }
        room[y][x] = '*';
    
        //显示房间
        for (int i = 0; i < width; i++) {
            for (int j = 0; j < length; j++)
                cout << room[i][j];
            cout << endl;
        }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码