美文网首页
腾讯校招-判断正方形-c++

腾讯校招-判断正方形-c++

作者: Jacinth | 来源:发表于2017-09-13 17:03 被阅读0次

第一行输入n;
随后输入n组数据,每组数据的第一行先输入横坐标,第二行输入纵坐标;
判断四个点能否组成正方形

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <string>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <algorithm>
#include <unordered_map>
using namespace std;

/*解题思路:
正方形的边的平方的和等于对角线的平方,则为正方形
*/
int i_max(int* num,int L){
    int tmp=num[0];
    for(int a=0;a<L;a++)
        tmp=max(tmp,num[a]);
    return tmp;
}
int i_sum(int* num,int L){
    int tmp=0;
    for(int a=0;a<L;a++){
        tmp=tmp+num[a];
    }
    return tmp;
}
int main(){
    int n;
    cin>>n;
    int x[n][4],y[n][4];//存储点坐标
    int j;
    for(int i=0;i<n;i++){
        j=0;
        do{
            cin>>x[i][j++];
        }while(getchar()!='\n');
        j=0;
        do{
            cin>>y[i][j++];
        }while(getchar()!='\n');
    }
    int result[6];
    for(int i=0;i<6;i++)
        result[i]=0;
    for(int i=0;i<n;i++){
        int k=0;
        for(int p=0;p<4;p++){
            for(int q=p+1;q<4;q++){
                result[k++]=(x[i][p]-x[i][q])*(x[i][p]-x[i][q])+(y[i][p]-y[i][q])*(y[i][p]-y[i][q]);//存储的是边的长度的平方
            }
        }
        int count=0;
        while(i_sum(result,6)!=0){
            count++;
            int tmp=i_max(result,6);
            for(int r=0;r<6;r++){
                if(result[r]==tmp){
                    result[r]=0;
                }
            }
        }
        if(count==2)//如果只存在两条边
            cout<<"yes"<<endl;
        else//如果存在一条或三条以上的边则不是正方形
            cout<<"no"<<endl;
    }
    return 0;
}

相关文章

网友评论

      本文标题:腾讯校招-判断正方形-c++

      本文链接:https://www.haomeiwen.com/subject/uhllsxtx.html