说实话,这题我是抄题解过的。
但是做完之后发现这个题也并不是非常难理解(但是不太好写),主要有一下需要注意的地方:
-
覆盖顺序:从下到上,从左往右,从前往后
-
观察出每个立方体的特殊点坐标,比如这里选的是左下角
-
我这里的图是反着存储的
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 55;
int n, m;
int h[N][N];
int maxx, maxy;
char ans[1000][1000];
int k[6] = { 2, 1, 0, 0, 0, 0 };
int kc[6] = { 6, 6, 6, 6, 5, 4 };
char b[10][10] = {
" +---+",
" / /|",
"+---+ |",
"| | +",
"| |/ ",
"+---+ ",
};
void fg(int x, int y) {
for(int i = 5; i >= 0; i--)
for(int j = k[i]; j <= kc[i]; j++) {
ans[5 - i + x][j + y] = b[i][j];
if(5 - i + x > maxx) maxx = 5 - i + x;
if(j + y > maxy) maxy = j + y;
}
}
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 0; j < m; j++)
cin >> h[i][j];
for(int i = 1; i <= n; i++)
for(int j = 0; j < m; j++)
for(int k = 0; k < h[i][j]; k++) {
fg((n - i) * 2 + 1 + 3 * k, (n - i) * 2 + 1 * 4 * j);
}
for(int i = maxx; i >= 1; i--) {
for(int j = 0; j <= maxy; j++)
if(ans[i][j] == '\000') cout << ".";
else printf("%c", ans[i][j]);
printf("\n");
}
return 0;
}
最后这里是图每步覆盖的坐标和图的生成过程(图是反着存的),这样就更容易理解了:
5 5
...........
...........
...........
...........
....+---+..
....| |\.
....| | +
....+---+ |
.....\ \|
......+---+
8 5
...........
...........
...........
...........
....+---+..
....| |\.
....| | +
....+---+ |
....| |\|
....| | +
....+---+ |
.....\ \|
......+---+
5 9
...............
...............
...............
...............
....+---+---+..
....| | |\.
....| | | +
....+---+---+ |
....| |\ \|
....| | +---+
....+---+ |....
.....\ \|....
......+---+....
8 9
...............
...............
...............
...............
....+---+---+..
....| | |\.
....| | | +
....+---+---+ |
....| | |\|
....| | | +
....+---+---+ |
.....\ \ \|
......+---+---+
5 13
...................
...................
...................
...................
....+---+---+---+..
....| | | |\.
....| | | | +
....+---+---+---+ |
....| | |\ \|
....| | | +---+
....+---+---+ |....
.....\ \ \|....
......+---+---+....
5 17
.......................
.......................
.......................
.......................
....+---+---+---+---+..
....| | | | |\.
....| | | | | +
....+---+---+---+---+ |
....| | |\ \ \|
....| | | +---+---+
....+---+---+ |........
.....\ \ \|........
......+---+---+........
8 17
.......................
.......................
.......................
.......................
....+---+---+---+---+..
....| | | | |\.
....| | | | | +
....+---+---+---+---+ |
....| | |\ | |\|
....| | | +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
3 3
.......................
.......................
..+---+................
..| |\...............
..| | +---+---+---+..
..+---+ | | | |\.
...\ \| | | | +
....+---+---+---+---+ |
....| | |\ | |\|
....| | | +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
6 3
.......................
.......................
..+---+................
..| |\...............
..| | +---+---+---+..
..+---+ | | | |\.
..| |\| | | | +
..| | +---+---+---+ |
..+---+ | |\ | |\|
...\ \| | +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
3 7
.......................
.......................
..+---+---+............
..| | |\...........
..| | | +---+---+..
..+---+---+ | | |\.
..| |\ \| | | +
..| | +---+---+---+ |
..+---+ | |\ | |\|
...\ \| | +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
6 7
.......................
.......................
..+---+---+............
..| | |\...........
..| | | +---+---+..
..+---+---+ | | |\.
..| | |\| | | +
..| | | +---+---+ |
..+---+---+ |\ | |\|
...\ \ \| +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
3 11
.......................
.......................
..+---+---+---+........
..| | | |\.......
..| | | | +---+..
..+---+---+---+ | |\.
..| | |\ \| | +
..| | | +---+---+ |
..+---+---+ |\ | |\|
...\ \ \| +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
3 15
.......................
.......................
..+---+---+---+---+....
..| | | | |\...
..| | | | | +..
..+---+---+---+---+ |\.
..| | |\ \ \| +
..| | | +---+---+ |
..+---+---+ |\ | |\|
...\ \ \| +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
1 1
+---+..................
| |\.................
| | +---+---+---+....
+---+ | | | |\...
.\ \| | | | +..
..+---+---+---+---+ |\.
..| | |\ \ \| +
..| | | +---+---+ |
..+---+---+ |\ | |\|
...\ \ \| +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
4 1
+---+..................
| |\.................
| | +---+---+---+....
+---+ | | | |\...
| |\| | | | +..
| | +---+---+---+ |\.
+---+ | |\ \ \| +
.\ \| | +---+---+ |
..+---+---+ |\ | |\|
...\ \ \| +-| | +
....+---+---+ |.+---+ |
.....\ \ \|..\ \|
......+---+---+...+---+
7 1
+---+..................
| |\.................
| | +---+---+---+....
+---+ | | | |\...
| |\| | | | +..
| | +---+---+---+ |\.
+---+ | |\ \ \| +
| |\| | +---+---+ |
| | +---+ |\ | |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
1 5
+---+---+..............
| | |\.............
| | | +---+---+....
+---+---+ | | |\...
| |\ \| | | +..
| | +---+---+---+ |\.
+---+ | |\ \ \| +
| |\| | +---+---+ |
| | +---+ |\ | |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
4 5
+---+---+..............
| | |\.............
| | | +---+---+....
+---+---+ | | |\...
| | |\| | | +..
| | | +---+---+ |\.
+---+---+ |\ \ \| +
| |\ \| +---+---+ |
| | +---+ |\ | |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
1 9
+---+---+---+..........
| | | |\.........
| | | | +---+....
+---+---+---+ | |\...
| | |\ \| | +..
| | | +---+---+ |\.
+---+---+ |\ \ \| +
| |\ \| +---+---+ |
| | +---+ |\ | |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
1 13
+---+---+---+---+......
| | | | |\.....
| | | | | +....
+---+---+---+---+ |\...
| | |\ \ \| +..
| | | +---+---+ |\.
+---+---+ |\ \ \| +
| |\ \| +---+---+ |
| | +---+ |\ | |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
4 13
+---+---+---+---+......
| | | | |\.....
| | | | | +....
+---+---+---+---+ |\...
| | |\ | |\| +..
| | | +-| | + |\.
+---+---+ |\+---+ |\| +
| |\ \| +\ \|-+ |
| | +---+ |\+---+ |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+
+---+---+---+---+......
| | | | |\.....
| | | | | +....
+---+---+---+---+ |\...
| | |\ | |\| +..
| | | +-| | + |\.
+---+---+ |\+---+ |\| +
| |\ \| +\ \|-+ |
| | +---+ |\+---+ |\|
+---+ |\ \| +-| | +
.\ \|-+---+ |.+---+ |
..+---+ \ \|..\ \|
......+---+---+...+---+