正方形
描述
小明今天又来巡视他自己的牧场了,牧场里有很多牛,他随机的选择了四头,并给了你这四头牛的坐标,请你计算一下,这四头牛之间是否组成了一个正方形,可以输出YES,不可以输出NO
day14-02.zip
输入
第一行一个整数T(T<=1000),表示数据组数
每组数据有两行,
第一行四个整数,分别是每头牛的x(0<=x<=10000)坐标
第二行四个整数,分别是每头牛的y(0<=y<=10000)坐标
输出
T行,每行一个字符串
输入样例 1
1
1 2 1 2
1 1 2 2
输出样例 1
YES
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
bool isSquare(vector<int>& x, vector<int>& y) {
vector<double> distances;
for (int i = 0; i < 4; i++) {
for (int j = i + 1; j < 4; j++) {
double dist = sqrt(pow(x[i] - x[j], 2) + pow(y[i] - y[j], 2));
distances.push_back(dist);
}
}
sort(distances.begin(), distances.end());
if (distances[0] == distances[1] && distances[1] == distances[2] && distances[2] == distances[3] && distances[4] == distances[5]) {
return true;
}
return false;
}
int main() {
int T;
cin >> T;
while (T--) {
vector<int> x(4), y(4);
for (int i = 0; i < 4; i++) {
cin >> x[i];
}
for (int i = 0; i < 4; i++) {
cin >> y[i];
}
if (isSquare(x, y)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
运行结果:
代码:
#include <iostream>
using namespace std;
int distance(int x1,int y1,int x2,int y2)
{
return (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
}
int main()
{
int T;
cin >> T;
int x[4],y[4];
int len[20]={0};
int k = 0;
for(int i=0;i<T;i++)
{
for(int j=0;j<4;j++)
cin >> x[j];
for(int j=0;j<4;j++)
cin >> y[j];
}
//计算边长
for(int i=0;i<4;i++)
{
for(int j=i+1;j<4;j++)
{
len[k++] = distance(x[i],y[i],x[j],y[j]);
}
}
//按照长度排序
for(int i=0;i<k-1;i++)
{
for(int j=0;j<k-1-i;j++)
{
if(len[j] > len[j+1])
{
int xx = len[j];
len[j] = len[j+1];
len[j+1]= xx;
}
}
}
if(len[0] == len[1] && len[0]== len[2] && len[0]== len[3] && len[0]> 0)
cout <<"YES";
else
cout <<"NO";
return 0;
}
引用 皆我百晓生 小程序回复内容作答:
下面是一个可以解决这个问题的C++代码示例:
#include <iostream>
#include <cmath>
using namespace std;
bool isSquare(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
int d1 = pow(x1 - x2, 2) + pow(y1 - y2, 2);
int d2 = pow(x1 - x3, 2) + pow(y1 - y3, 2);
int d3 = pow(x1 - x4, 2) + pow(y1 - y4, 2);
if (d1 == 0 || d2 == 0 || d3 == 0) return false;
if (d1 == d2 && 2*d1 == d3 && 2*(pow(x2 - x4, 2) + pow(y2 - y4, 2)) == (pow(x2 - x3, 2) + pow(y2 - y3, 2))) return true;
if (d2 == d3 && 2*d2 == d1 && 2*(pow(x3 - x2, 2) + pow(y3 - y2, 2)) == (pow(x3 - x4, 2) + pow(y3 - y4, 2))) return true;
if (d1 == d3 && 2*d1 == d2 && 2*(pow(x2 - x3, 2) + pow(y2 - y3, 2)) == (pow(x2 - x4, 2) + pow(y2 - y4, 2))) return true;
return false;
}
int main() {
int T;
cin >> T;
while (T--) {
int x1, y1, x2, y2, x3, y3, x4, y4;
cin >> x1 >> x2 >> x3 >> x4;
cin >> y1 >> y2 >> y3 >> y4;
if (isSquare(x1, y1, x2, y2, x3, y3, x4, y4)) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
}
return 0;
}
该代码中的函数isSquare
用于判断给定的四个点是否能够组成一个正方形。通过计算四个点之间的距离并比较它们的关系,可以确定是否为正方形。
在主函数中,根据输入的数据,依次判断每组四个点是否为正方形,并输出相应的结果。
你可以将你的测试数据输入到该代码中,并观察输出结果是否符合你的期望。
【以下回答由 GPT 生成】
【问题优化1】 问题标题: 判断四个坐标是否组成正方形 问题标签: 蓝桥杯
def is_square(points):
# 计算每两个点之间的距离
distances = []
for i in range(len(points)):
for j in range(i+1, len(points)):
dist = ((points[i][0] - points[j][0])**2 + (points[i][1] - points[j][1])**2)**0.5
distances.append(dist)
# 判断距离是否满足正方形的条件
if len(set(distances)) == 2 and (distances.count(distances[0]) == 4 or distances.count(distances[0]) == 2):
return "YES"
else:
return "NO"
# 主函数
def main():
T = int(input()) # 数据组数
for _ in range(T):
x = list(map(int, input().split())) # x坐标
y = list(map(int, input().split())) # y坐标
points = list(zip(x, y)) # 将x坐标和y坐标合并为坐标点
result = is_square(points) # 判断是否组成正方形
print(result)
main()
【问题优化2】 问题标题: 判断坐标是否组成正方形 问题标签: 蓝桥杯
def is_square(points):
# 计算每两个点之间的距离
distances = []
for i in range(len(points)):
for j in range(i+1, len(points)):
dist = ((points[i][0] - points[j][0])**2 + (points[i][1] - points[j][1])**2)**0.5
distances.append(dist)
# 判断距离是否满足正方形的条件
if len(set(distances)) == 2 and (distances.count(distances[0]) == 4 or distances.count(distances[0]) == 2):
return "YES"
else:
return "NO"
# 主函数
def main():
T = int(input()) # 数据组数
for _ in range(T):
x = list(map(int, input().split())) # x坐标
y = list(map(int, input().split())) # y坐标
points = list(zip(x, y)) # 将x坐标和y坐标合并为坐标点
result = is_square(points) # 判断是否组成正方形
print(result)
main()
以上是对问题的优化解答,根据输入的坐标判断是否组成正方形。具体方法是计算每两个点之间的距离,然后判断距离是否满足正方形的条件。如果满足条件,则输出YES,否则输出NO。
注意:以上代码仅为问题解决方案的示例,可能需要根据具体编程环境进行适当修改。
【相关推荐】