1 条题解
-
0
自动搬运
来自洛谷,原作者为

Maxmilite
**搬运于
2025-08-24 21:15:11,当前版本为作者最后更新于2023-07-16 21:11:15,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Source & Knowledge
2023 年 7 月语言月赛,由洛谷网校入门计划/基础计划提供。
题目大意
给定一个 的空间中,小正方体的分布情况。求这个空间形状的三视图。
题目分析
本题难点在于较为复杂的坐标转换。
我们首先定义,按照 轴区分的,每一条从前往后的区域叫做列;按照 轴区分的,每一条从左向右的区域叫做行。
我们如果使用如下方式进行读入:
for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) cin >> a[i][j];那么我们是按照从左向右的顺序读入的每一列的信息。因此, 数组的第一维代表列( 轴)信息,第二维代表行( 轴)信息。且顺序为,从左向右,从前向后。因此,我们在输出三视图时需要考虑这个问题。
正视图
正视图要求从左向右。显然输出的是每一列的情况,因此我们首先需要正序枚举第一维(列, 轴)。
在每一列中,我们统计这一列是否出现过正方体,如果出现过则在当前位置输出 ,否则输出 。
核心代码如下:
for (int i = 1; i <= n; ++i) { int x = 0; for (int j = 1; j <= m; ++j) { if (a[i][j] == 1) x = 1; } cout << x << " "; } cout << endl;左视图
左视图要求从后向前。显然输出的是每一行的情况,因此我们首先需要倒序枚举第二维(行, 轴)。
在每一行中,我们统计这一行是否出现过正方体,如果出现过则在当前位置输出 ,否则输出 。
核心代码如下:
for (int j = m; j >= 1; --j) { int x = 0; for (int i = 1; i <= n; ++i) { if (a[i][j] == 1) x = 1; } cout << x << " "; } cout << endl;俯视图
左视图要求从后向前,从左向右。因此我们首先需要倒序枚举第二维(行, 轴),其次正序枚举第一维(列, 轴)。在枚举中,输出每一格的情况即可。
核心代码如下:
for (int j = m; j >= 1; --j) { for (int i = 1; i <= n; ++i) { cout << a[i][j] << " "; } cout << endl; }视频讲解
- 1
信息
- ID
- 8921
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者