題目:求n個立方體的公共部分的體積。
分析:計算幾何。直接求出每個維度的最大的最小值和最小的最大值,做差求積即可。
說明:注意如果摸個維度是負數,則取0。
#include <stdio.h>
#include <string.h>
int x[1001];
int y[1001];
int z[1001];
int l[1001];
int main()
{
int n, m, x1, y1, z1, x2, y2, z2;
while (~scanf("%d",&n) && n) {
for (int i = 0; i < n; ++ i)
scanf("%d%d%d%d",&x[i],&y[i],&z[i],&l[i]);
x1 = x[0]; x2 = x[0]+l[0];
y1 = y[0]; y2 = y[0]+l[0];
z1 = z[0]; z2 = z[0]+l[0];
for (int i = 1; i < n; ++ i) {
x1 = (x1>x[i])?x1:x[i];
y1 = (y1>y[i])?y1:y[i];
z1 = (z1>z[i])?z1:z[i];
}
for (int i = 1; i < n; ++ i) {
x2 = (x2<x[i]+l[i])?x2:(x[i]+l[i]);
y2 = (y2<y[i]+l[i])?y2:(y[i]+l[i]);
z2 = (z2<z[i]+l[i])?z2:(z[i]+l[i]);
}
if (x2 < x1 || y2 < y1 || z2 < z1)
printf("0\n");
else printf("%d\n",(x2-x1)*(y2-y1)*(z2-z1));
}
return 0;
}

本文介绍了一种计算多个立方体交集体积的方法,通过确定各维度上的最大最小值来快速求解,适用于计算几何领域的问题解决。

431

被折叠的 条评论
为什么被折叠?



