腾讯模拟笔试——判断正方形

2018腾讯春招web前端模拟笔试——判断正方形

这几天投了腾讯的web前端岗位,昨晚做了腾讯模拟笔试,前端相关内容考的挺少的,然后有两道编程题,做了第一道。
第一道编程题是给定四个点,判断是否是正方形
第二题是动态规划的,没时间做(当然也不熟)

下面说给定四个点判断正方形这题
要注意四个点给的顺序是各种可能都有的,所以不能按照某个顺序假定第一个点是哪,第二个是哪什么的,一开始我就假定都按照顺时针顺序给点,然后通过率只有50%。

思路:
四个点,可以计算出六条线段的长度
对于正方形,一定有六条线段里面有四条相等的边,两条相等的对角线
所以只要对计算出的六个数据排序后判断前四个是否相等,后两个是否相等即可

代码如下:

#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;

int main() {
    int n, x1, x2, x3, x4, y1, y2, y3, y4, line[6];
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> x1 >> x2 >> x3 >> x4 >> y1 >> y2 >> y3 >> y4;
        line[0] = pow(x1-x2,2.0) + pow(y1-y2,2.0);
        line[1] = pow(x1-x3,2.0) + pow(y1-y3,2.0);
        line[2] = pow(x3-x4,2.0) + pow(y3-y4,2.0);
        line[3] = pow(x1-x4,2.0) + pow(y1-y4,2.0);
        line[4] = pow(x2-x3,2.0) + pow(y2-y3,2.0);
        line[5] = pow(x2-x4,2.0) + pow(y2-y4,2.0);
        sort(line, line+6);
        if (line[0]==line[1] && line[1]==line[2] && line[2]==line[3] && line[4]==line[5]) cout << "Yes" << endl;
        else cout << "No" << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/chenh297/article/details/79675991