首页 > 试题广场 >

三视图

[编程题]三视图
  • 热度指数:801 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
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..
...

说明

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

备注:


import sys
data = sys.stdin.read().split()
it = iter(data)
X = int(next(it))
Y = int(next(it))
Z = int(next(it))
n = int(next(it))

# 正视图方块
y_x = set()
# 左视图方块
y_z = set()
# 俯视图方块
z_x = set()
for _ in range(n):
    x = int(next(it))
    y = int(next(it))
    z = int(next(it))
    y_x.add((y,x))
    y_z.add((y,z))
    z_x.add((z,x))

front_view = [['.' for _ in range(X)] for _ in range(Y)]
left_view = [['.' for _ in range(Z)] for _ in range(Y)]
top_view = [['.' for _ in range(X)] for _ in range(Z)]

for y,x in y_x:
    front_view[Y-y][x-1] = 'x'
for y,z in y_z:
    left_view[Y-y][z-1] = 'x'
for z,x in z_x:
    top_view[z-1][x-1] = "x"

for i in range(Y):
    print(''.join([str(x) for x in front_view[i]]),''.join([str(x) for x in left_view[i]]))
print()
for i in range(Z):
    print(''.join([str(x) for x in top_view[i]]))

发表于 2026-03-17 00:39:52 回复(0)

问题信息

难度:
1条回答 675浏览

热门推荐

通过挑战的用户

查看代码
三视图