hrbust2214 Judge

来源:互联网 发布:项目管理协作软件 编辑:程序博客网 时间:2024/06/11 06:14

题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2214


题意:输入4个点的坐标,判断是否能组成一个正方形.


说明:求出6条边长,判断对角线相等并且4条边相等(至少三条边)


坑:4个点有相等的情况,这时不能组成一个正方形


#include<stdio.h>#include<iostream>#include<math.h>#include<algorithm>using namespace std;double calculate(double x1,double y1,double x2,double y2){//此函数用于计算俩点的  边    double res;    res = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));    return res;}int main(){    double ax,ay,bx,by,cx,cy,dx,dy;    while(cin >>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy){        if(ax==bx&&ax==cx&&ax==dx&&ay==by&&ay==cy&&ay==dy) {//如果这四个点重合,则不能构成正方形            cout <<"No\n";            continue;        }        double bian[6];        bian[0]=calculate(ax,ay,bx,by);        bian[1]=calculate(ax,ay,cx,cy);        bian[2]=calculate(ax,ay,dx,dy);        bian[3]=calculate(bx,by,cx,cy);        bian[4]=calculate(bx,by,dx,dy);        bian[5]=calculate(cx,cy,dx,dy);        sort(bian,bian+6);        //如果对角线相等,并且,至少三条边相等(如果选俩条,可能是对边)        if(bian[4]==bian[5] && bian[0]==bian[1] &&bian[0]==bian[2])            cout << "Yes\n";        else            cout << "No\n";    }    return 0;}




0 0