看了半天题,以为是计算坐标求解,写了半天再结合题解我才反应过来这不就是定义数组统计未标记个数求解吗(orz是我太菜了)
题目说”长宽高分别为 w,h,x 组成的实心玻璃立方体,可以认为是由 1×1×1的数个小方块组成的“
那假设大立方体是1x1x1,也就是数组的arr[1][1][1],就一个元素,每个元素也都是知道的1x1x1,体积也相同,都对应上了
所以大致步骤如下:
1.根据输入的长宽高定义三维数组arr[w][x][h]
2.数组全设0,表示未被切除
3.根据输入的次数遍历,每次拿到两组顶点坐标
3.已知第一组坐标<第二组坐标,所以只需要考虑当前位置的标记是0还是1
4.如果是0就赋为1并且计数器++,表示切除的个数(在循环外面先定义好)
5.求出立方体体积并减去计数器就是剩下的体积
具体代码如下:
#include<iostream>
#include<string.h>
using namespace std;
int main() {
int w, x, h;//长 宽 高
cin >> w >> x >> h;
int big[w + 1][x + 1][h + 1];
memset(big, 0, sizeof(big));
int cnt = 0;//统计标记要切掉的小方块的个数
int q;//切几次
cin >> q;
while (q--) {
int px1, py1, pz1, px2, py2, pz2;
cin >> px1 >> py1 >> pz1 >> px2 >> py2 >> pz2;
for (int i = px1; i <= px2; i++) {
for (int j = py1; j <= py2; j++) {
for (int k = pz1; k <= pz2; k++) {
if (big[i][j][k] == 0) {
big[i][j][k] = 1;
cnt++;
}
}
}
}
}
cout << w * x * h - cnt;
return 0;
}