三视图
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; }