正方形,给定牧场随机四头牛的坐标

正方形
描述

小明今天又来巡视他自己的牧场了,牧场里有很多牛,他随机的选择了四头,并给了你这四头牛的坐标,请你计算一下,这四头牛之间是否组成了一个正方形,可以输出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;
}

运行结果:

img

代码:

#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。

注意:以上代码仅为问题解决方案的示例,可能需要根据具体编程环境进行适当修改。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632