NC217455. 四面体
描述
输入描述
共四行,每行输入个参数,表示点的坐标,输入的坐标均为整数。输入保证,四个点的坐标可以构成四面体。(不会出现四点共面的情况)
输出描述
仅一行一个实数,表示构成四面体的体积,你的答案正确,当且仅当你的答案与实际答案之间的误差不大于。
示例1
输入:
0 0 0 0 3 0 4 0 0 0 0 4
输出:
8.00000000000000
示例2
输入:
-1 -49 -20 -25 -6 12 38 -45 -29 -30 -37 -12
输出:
2189.1666666666666667
C 解法, 执行用时: 5ms, 内存消耗: 376K, 提交时间: 2022-04-23 21:16:55
#include<stdio.h> #include<math.h> int main() { int x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4; double v; scanf("%d%d%d",&x1,&y1,&z1); scanf("%d%d%d",&x2,&y2,&z2); scanf("%d%d%d",&x3,&y3,&z3); scanf("%d%d%d",&x4,&y4,&z4); v=1.0/6*((x1-x2)*((y3-y2)*(z4-z2)-(z3-z2)*(y4-y2))-(x3-x2)*((y1-y2)*(z4-z2)-(z1-z2)*(y4-y2))+(x4-x2)*((y1-y2)*(z3-z2)-(z1-z2)*(y3-y2))); printf("%lf",fabs(v)); }
pypy3 解法, 执行用时: 140ms, 内存消耗: 25756K, 提交时间: 2022-04-23 10:24:07
x1,y1,z1 = map(int,input().strip().split()) x2,y2,z2 = map(int,input().strip().split()) x3,y3,z3 = map(int,input().strip().split()) x4,y4,z4 = map(int,input().strip().split()) print(abs((x2-x1)*(y3-y1)*(z4-z1) + (x3-x1)*(y4-y1)*(z2-z1) + (x4-x1)*(y2-y1)*(z3-z1) - (x4-x1)*(y3-y1)*(z2-z1) - (x3-x1)*(y2-y1)*(z4-z1) - (x2-x1)*(y4-y1)*(z3-z1))/6)
Python3 解法, 执行用时: 49ms, 内存消耗: 4640K, 提交时间: 2022-04-24 19:21:34
x1,y1,z1 = map(int,input().strip().split()) x2,y2,z2 = map(int,input().strip().split()) x3,y3,z3 = map(int,input().strip().split()) x4,y4,z4 = map(int,input().strip().split()) ans = abs((x2-x1)*(y3-y1)*(z4-z1)+(x3-x1)*(y4-y1)*(z2-z1)+(x4-x1)*(y2-y1)*(z3-z1)-(x4-x1)*(y3-y1)*(z2-z1)-(x3-x1)*(y2-y1)*(z4-z1)-(x2-x1)*(y4-y1)*(z3-z1))/6 print(ans)
C++ 解法, 执行用时: 5ms, 内存消耗: 432K, 提交时间: 2022-04-25 09:28:55
#include<bits/stdc++.h> using namespace std; double a[12]; int main() { for(int i=0;i<12;i++) scanf("%lf",&a[i]); for(int i=3;i<12;i++) a[i]-=a[i%3]; double x=(a[4]*a[8]-a[5]*a[7])*a[9],y=(a[3]*a[7]-a[4]*a[6])*a[11],z=(a[5]*a[6]-a[3]*a[8])*a[10]; printf("%.14lf\n",abs(x+y+z)/6.0); }