Bear_2 除了生产小熊饼干外,又新生产了菱形饼干和正方形饼干。但是一号车间质检员张*蛋是个憨憨,他只会判断他们的边长来确定形状,众所周知这是不行的。为了让自己不失业她求助于你,请你帮忙判断一下它是哪块小饼干? 输入格式: 按顺时针输入。 输入包括 4 行,第 i 行给出两个整数 X i ,Y i (−100<=X i ,Y i <=100) 保证输入的四条边长相同 输出格式: 如果它是一个菱形饼干请输出"LX",否则请输出"ZFX",不带引号.用c语言生成
时间: 2024-03-10 19:46:45 浏览: 80
以下是用C语言实现的代码:
```c
#include <stdio.h>
int main() {
int x[4], y[4];
for (int i = 0; i < 4; i++) {
scanf("%d %d", &x[i], &y[i]);
}
int a = (x[1] - x[0]) * (y[2] - y[1]) - (x[2] - x[1]) * (y[1] - y[0]);
int b = (x[2] - x[1]) * (y[3] - y[2]) - (x[3] - x[2]) * (y[2] - y[1]);
int c = (x[1] - x[0]) * (y[3] - y[2]) - (x[3] - x[2]) * (y[1] - y[0]);
if (a == 0 && b == 0 && c == 0) {
printf("ZFX");
} else {
printf("LX");
}
return 0;
}
```
思路解析:
题目中给出四个点的坐标,我们可以分别将它们存储在两个数组 `x` 和 `y` 中。接着,我们需要用向量叉积的方法来判断它是菱形饼干还是正方形饼干。
对于两个向量 $\vec{AB}$ 和 $\vec{AC}$,它们的叉积为 $\vec{AB} \times \vec{AC} = |\vec{AB}| |\vec{AC}| \sin\theta$,其中 $|\vec{AB}|$ 和 $|\vec{AC}|$ 分别为向量长度,$\theta$ 为两向量之间的夹角。叉积的结果是一个向量,其长度为面积的二倍,方向垂直于两个向量所在的平面,符合右手定则。
我们可以将 $\vec{AB}$ 和 $\vec{AC}$ 看作是两条边,它们所在的平面即为对角线所在的平面。对于一个正方形饼干,其对角线所在的平面是与底面垂直的。因此,我们可以用向量叉积来判断四条边是否在同一平面上。如果是,则为正方形饼干;否则为菱形饼干。
具体实现时,我们可以分别计算 $\vec{AB} \times \vec{AC}$、$\vec{BC} \times \vec{BD}$ 和 $\vec{AD} \times \vec{CD}$ 的值,如果它们都为 $0$,则为正方形饼干;否则为菱形饼干。
阅读全文