三视图

Etéreo 拿出家里的许多的立方体积木,堆成了一个三维空间中的模型。既然你高考选了技术, 那想必你一定想知道,这个模型的三视图是什么吧!

图中,xx 轴、yy 轴和 zz 轴的方向已经标明。现在规定,图中的红色面为主视面,蓝色面为右视面(注意输出中应为左视而非右视),黄色面为俯视面。具体方向可以观察样例。


输入描述:
第一行四个数 ,表示该三维空间大小为 ,且有个立方体。
接下去行,每行三个整数 ,表示其位置坐标。

输出描述:
输出共行,前行每行个字符,输出正视图及左视图,两幅图之间有一列空格;接下去输出一个空行;再接下去行,每行 个字符,表示俯视图。
其中表示空, 表示有立方体。

示例1

输入:

2 2 2 2
1 1 1
2 2 2

输出:

.x .x
x. x.

x.
.x

示例2

输入:

3 3 3 3
1 1 2
2 1 1
1 2 1

输出:

... ...
x.. x..
xx. xx.

xx.
x..
...

样例解释:

思路:直接对题意进行模拟即可,用数组分别存储每个面的点,最后输出的时候,注意一下哈输入顺序即可
以下是AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1000 + 5;
bool x[N][N];
bool y[N][N];
bool z[N][N];
int main(){
    int X,Y,Z,n;
    scanf("%d%d%d%d",&X,&Y,&Z,&n);
    while(n--){
        int tx,ty,tz;
        scanf("%d%d%d",&tx,&ty,&tz);
        x[ty][tz] = true;
        y[tz][tx] = true;
        z[tx][ty] = true;
    }
    for(int i = Y;i >= 1;i--){
        for(int j = 1;j <= X;j++){
            putchar(z[j][i] ? 'x' : '.');
        }
        putchar(' ');
        for(int j = 1;j <= Z;j++){
            putchar(x[i][j] ? 'x' : '.');
        }
        putchar('\n');
    }
    printf("\n");
    for(int i = 1;i <= Z;i++){
        for(int j = 1;j <= X;j++){
            putchar(y[i][j] ? 'x' : '.');
        }
        putchar('\n');
    }
    return 0;
}