C语言编程:帮助哈士奇找到正方形饼干
C语言编程:帮助哈士奇找到正方形饼干
双十一到了,哈士奇买了很多饼干,因为他想吃胖。但是哈士奇只吃正方形的饼干。你来帮哈士奇找饼干吧!
现在告诉你4个点的坐标,问你能否以这4个点为顶点组成一个正方形。如果可以输出'yes',否则输出'no';
因为哈士奇的数学不怎么好,所以希望你可以帮助他吃到喜欢的饼干;
输入
输入格式: 输入数据有多组,输入8个整数,为4个点的坐标ax,ay,bx,by,cx,cy,dx,dy.(每个数字的绝对值都小于100),输入保证没有4个点相同的情况;
输出格式: 如果可以组成正方形输出yes,否则输出no。
输入样例:
0 0 1 0 0 1 1 1
1 2 2 3 4 5 5 6
输出样例:
yes
no
以下是使用C语言编写的解决方案:
#include <stdio.h>
#include <math.h>
int checkSquare(int ax, int ay, int bx, int by, int cx, int cy, int dx, int dy) {
int d1 = (ax - bx) * (ax - bx) + (ay - by) * (ay - by); // 计算ab边的平方长度
int d2 = (ax - cx) * (ax - cx) + (ay - cy) * (ay - cy); // 计算ac边的平方长度
int d3 = (ax - dx) * (ax - dx) + (ay - dy) * (ay - dy); // 计算ad边的平方长度
// 判断是否是正方形
if (d1 == d2 && 2 * d1 == d3 && 2 * (bx - dx) * (bx - dx) == d1) {
return 1;
}
return 0;
}
int main() {
int ax, ay, bx, by, cx, cy, dx, dy;
while (scanf("%d %d %d %d %d %d %d %d", &ax, &ay, &bx, &by, &cx, &cy, &dx, &dy) != EOF) {
int result = checkSquare(ax, ay, bx, by, cx, cy, dx, dy);
if (result == 1) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
解释:
- 首先,定义一个函数
checkSquare,用于检查给定的4个点是否可以组成一个正方形。函数的参数为4个点的坐标(ax, ay, bx, by, cx, cy, dx, dy)。 - 在函数中,首先计算4个边的平方长度:d1为ab边的平方长度,d2为ac边的平方长度,d3为ad边的平方长度。
- 判断是否可以组成正方形的条件是:d1等于d2,d3等于2 * d1,且2 * (bx - dx) * (bx - dx)等于d1。
- 如果满足上述条件,返回1;否则,返回0。
- 在
main函数中,使用scanf函数读取8个整数,为4个点的坐标。 - 调用
checkSquare函数检查给定的4个点是否可以组成一个正方形。 - 如果可以组成正方形,输出'yes';否则,输出'no'。
- 注意:在示例代码中,我们假设输入的4个点的坐标没有相同的情况,并且每个坐标的绝对值都小于100。您可以根据实际情况进行调整。
原文地址: https://www.cveoy.top/t/topic/bUiV 著作权归作者所有。请勿转载和采集!