牛客小白赛1 F题三视图

链接:https://www.nowcoder.com/acm/contest/85/F
来源:牛客网

题目描述

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

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

输入描述:

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

输出描述:

输出共 
行,前 
行每行 
个字符,输出正视图及左视图,两幅图之间有一列空格;接下去输出一个空行;再接下去 
行,每行 
个字符,表示俯视图。其中  表示空,  表示有立方体。
示例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..
...

说明

这里可以把图片拉出去放大看哦~

备注:


 
思路分析:一开始傻乎乎的设了个唯一的三维数组,想着覆盖来解,发现很麻烦,跟随大神的脚步意识到直接建3个二维数组分别表示主视图,左视图,俯视图即可,在主视图里就不管z了,任何一个z下的x,y坐标存在都将这一点标记为有立方体,这样做就会非常简单了
然后可以注意下这个#define用法,比较方便
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int inf=1<<30;
 4 typedef long long ll;
 5 const double pi=acos(-1);
 6 #define mst(a,b) memset(a,b,sizeof(a))
 7 char a[1001][1001],b[1001][1001],c[1001][1001];//分别用来保存主,左,俯视图,二维即可 
 8 int X,Y,Z,n,x,y,z;
 9 int main(){
10     mst(a,'.');
11     mst(b,'.');
12     mst(c,'.');
13     cin>>X>>Y>>Z>>n;
14     while(n--){
15         cin>>x>>y>>z;
16         a[y][x]='x';
17         b[y][z]='x';
18         c[z][x]='x';
19     }
20     for(int i=Y;i>0;i--,puts("")){
21         for(int j=1;j<=X;j++)    cout<<a[i][j];
22         cout<<" ";
23         for(int j=1;j<=Z;j++)    cout<<b[i][j];
24     }
25     puts("");
26     for(int i=1;i<=Z;i++){
27         for(int j=1;j<=X;j++)    cout<<c[i][j];
28         cout<<endl;
29     }
30     return 0;
31 }
原文地址:https://www.cnblogs.com/qingjiuling/p/9856214.html