四点共面
四个点构造三个向量,形成一个行列式
若行列式的值为0,则共面;不为0,则不共面

给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算共面)。如果共面,输出"Yes",否则输出"No"。
Input
第1行:一个数T,表示输入的测试数量(1 <= T <= 1000) 第2 - 4T + 1行:每行4行表示一组数据,每行3个数,x, y, z, 表示该点的位置坐标(-1000 <= x, y, z <= 1000)。
Output
输出共T行,如果共面输出"Yes",否则输出"No"。
Input示例
1 1 2 0 2 3 0 4 0 0 0 0 0
Output示例
Yes
1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 struct a{ 5 int x,y,z; 6 }dian[6]; 7 int main() 8 { 9 int T; 10 scanf("%d",&T); 11 while(T--) 12 { 13 for (int i=0;i<4;i++) 14 cin>>dian[i].x>>dian[i].y>>dian[i].z; 15 int x1=dian[1].x-dian[0].x; 16 int x2=dian[2].x-dian[0].x; 17 int x3=dian[3].x-dian[0].x; 18 int y1=dian[1].y-dian[0].y; 19 int y2=dian[2].y-dian[0].y; 20 int y3=dian[3].y-dian[0].y; 21 int z1=dian[1].z-dian[0].z; 22 int z2=dian[2].z-dian[0].z; 23 int z3=dian[3].z-dian[0].z; 24 long long S=x1*y2*z3+x2*y3*z1+x3*y1*z2-x1*y3*z2-x2*y1*z3-x3*y2*z1; 25 if(S==0) cout<<"Yes"<<endl; 26 else cout<<"No\n"<<endl; 27 } 28 return 0; 29 }

浙公网安备 33010602011771号