思路:根据题意模拟。
#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;
}