P1009 立体图

思路:根据题意模拟。

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

    char board[10000][10000];
    int maxx, maxy, minx, miny;     

    void print_cube(int posx, int posy)
    {
        board[posx][posy] = '+'; board[posx][posy + 1] = '-'; board[posx][posy + 2] = '-';
        board[posx][posy + 3] = '-'; board[posx][posy + 4] = '+'; board[posx][posy + 5] = board[posx][posy + 5];
        board[posx][posy + 6] = board[posx][posy + 6];

        board[posx - 1][posy] = '|'; board[posx - 1][posy + 1] = ' '; board[posx - 1][posy + 2] = ' ';
        board[posx - 1][posy + 3] = ' '; board[posx - 1][posy + 4] = '|'; board[posx - 1][posy + 5] = '/';
        board[posx - 1][posy + 6] = board[posx - 1][posy + 6];

        board[posx - 2][posy] = '|'; board[posx - 2][posy + 1] = ' '; board[posx - 2][posy + 2] = ' ';
        board[posx - 2][posy + 3] = ' '; board[posx - 2][posy + 4] = '|'; board[posx - 2][posy + 5] = ' ';
        board[posx - 2][posy + 6] = '+';

        board[posx - 3][posy] = '+'; board[posx - 3][posy + 1] = '-'; board[posx - 3][posy + 2] = '-';
        board[posx - 3][posy + 3] = '-'; board[posx - 3][posy + 4] = '+'; board[posx - 3][posy + 5] = ' ';
        board[posx - 3][posy + 6] = '|';

        board[posx - 4][posy] = board[posx - 4][posy]; board[posx - 4][posy + 1] = '/'; board[posx - 4][posy + 2] = ' ';
        board[posx - 4][posy + 3] = ' '; board[posx - 4][posy + 4] = ' '; board[posx - 4][posy + 5] = '/';
        board[posx - 4][posy + 6] = '|';

        board[posx - 5][posy] = board[posx - 5][posy]; board[posx - 5][posy + 1] = board[posx - 5][posy + 1]; board[posx - 5][posy + 2] = '+';
        board[posx - 5][posy + 3] = '-'; board[posx - 5][posy + 4] = '-'; board[posx - 5][posy + 5] = '-';
        board[posx - 5][posy + 6] = '+';

        if (posx - 5 < minx)
            minx = posx - 5;
        if (posy < miny)
            miny = posy;
        if (posx > maxx)
            maxx = posx;
        if (posy + 6 > maxy)
            maxy = posy + 6;


    }

    int main()
    {
        //ifstream is("drawing.in");
        //ofstream os("drawing.out");

        int x, y;
        for (x = 0; x != 10000; ++x)
            for (y = 0; y != 10000; ++y)
                board[x][y] = '.';

        int m, n;
        cin >> m >> n;
        int matrix[50][50];
        vector<int> matrix_temp;
        int temp;
        while (cin >> temp)
            matrix_temp.push_back(temp);

        for (x = 0; x < m; ++x)
            for (y = 0; y < n; ++y)
                matrix[x][y] = matrix_temp[x*n + y];

        int o_posx = 3000, o_posy = 3000;
        minx = miny = maxx = maxy = o_posx;
        int i, j, k;
        int tempx, tempy;
        tempx = o_posx;
        tempy = o_posy;
        for (i = 0; i < m; ++i)
        {
            for (j = 0; j < n; ++j)
            {
                if (matrix[i][j] != 0)
                {
                    for (k = 0; k < matrix[i][j]; ++k)
                    {
                        print_cube(tempx - 3 * k + 2 * i, tempy + 4 * j - 2 * i);

                    }
                }
            }
        }
        for (i = minx; i<=maxx; ++i)
        {
            for (j = miny; j <=maxy; ++j)
                cout << board[i][j];
            cout << endl;
        }

        return 0;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值