本蒟蒻又碰到不会做的题了……

题目描述

给你平面直角坐标系中的四个点,判断这四个点是否构成一个正方形

输入格式

第一行输入四个整数xi(0≤x i≤10000)

第二行输入四个整数yi(0≤y i ≤10000)

输出格式

如果可以构成正方形,输出"It’s a square"

否则输出"Not a square"

劳烦各位大佬指点一下~

能给一下样例吗?

样例1

0 0 2 2

0 2 0 2

It’s a square

样例2

0 1 5 6

1 6 0 5

It’s a square

样例3

0 0 7 7

0 3 0 3

Not a square

主要是两点之间的长度公式//根号下(ax-bx)*(ax-bx)+(ay-by)**(ay-by)
核心代码
int main(){
cin>>a.x>>b.x>>c.x>>d.x;
cin>>a.y>>b.y>>c.y>>d.y;
n=pow((a.x-b.x),2)+pow((a.y-b.y),2);
m=pow((b.x-d.x),2)+pow((b.y-d.y),2);
n1=pow((d.x-c.x),2)+pow((d.y-c.y),2);
m1=pow((a.x-c.x),2)+pow((a.y-c.y),2);
if(n==m&&m1==n1&&m1==m){
cout<<“It’s a square”;
}else{
cout<<“Not a square”;
}
}
解析
(通过样例可知)
a点为左下
b点为左上
c点为右下
d点为右上
根据正方形性质可知ac=ab=cd=bd
结合两点之间线段长度公式得到
n=pow((a.x-b.x),2)+pow((a.y-b.y),2);
m=pow((b.x-d.x),2)+pow((b.y-d.y),2);
n1=pow((d.x-c.x),2)+pow((d.y-c.y),2);
m1=pow((a.x-c.x),2)+pow((a.x-c.x),2) ;
所以只要n=m=n1=m1,就是正方形

1 个赞

我也是蒟蒻有错勿喷

楼主别忘了加个万能头啊,不然要寄,cmath也可以

你的代码a,b,c,d点的位置不确定,把对角线也连起来,再比较

有样例是反的

#include<bits/stdc++.h>
using namespace std;
int main(){
  int a.x,b.x,c.x,d.x,a.y,b.y,c.y,d.y;
  cin >> a.x >> b.x >> c.x >> d.x;
  cin >> a.y >> b.y >> c.y >> d.y;
  n=pow((a.x-b.x),2)+pow((a.y-b.y),2);
  m=pow((b.x-d.x),2)+pow((b.y-d.y),2);
  n1=pow((d.x-c.x),2)+pow((d.y-c.y),2);
  m1=pow((a.x-c.x),2)+pow((a.y-c.y),2);
  if(n==m&&m1==n1&&m1==m){
    cout << "It’s a square";
    }else{
    cout << "Not a square";
  }
}

它说我int a.x这里有问题

啥问题啊?

十年OI一场空 不开long long见祖宗
C++的经典名言,你没开Long long

#include<bits/stdc++.h>
using namespace std;
int main(){
  long long a.x,b.x,c.x,d.x,a.y,b.y,c.y,d.y;
  cin >> a.x >> b.x >> c.x >> d.x;
  cin >> a.y >> b.y >> c.y >> d.y;
  n=pow((a.x-b.x),2)+pow((a.y-b.y),2);
  m=pow((b.x-d.x),2)+pow((b.y-d.y),2);
  n1=pow((d.x-c.x),2)+pow((d.y-c.y),2);
  m1=pow((a.x-c.x),2)+pow((a.y-c.y),2);
  if(n==m&&m1==n1&&m1==m){
    cout << "It’s a square";
    }else{
    cout << "Not a square";
  }
}

你在写函数吧,int ax,bx,cx,ay,by,cy,这样

我太菜了不会函数 :face_exhaling:

你的int形式不能是xxx.xxx,应该把"."去掉

这个是扩展提单的吧?二维数组能行吗?int a[xxx][xxx]?

#include<bits/stdc++.h>
using namespace std;
int main(){
  long long ax,bx,cx,dx,ay,by,cy,dy;
  cin >> ax >> bx >> cx >> dx;
  cin >> ay >> by >> cy >> dy;
  int n=pow((ax-bx),2)+pow((ay-by),2);
  int m=pow((bx-dx),2)+pow((by-dy),2);
  int n1=pow((dx-cx),2)+pow((dy-cy),2);
  int m1=pow((ax-cx),2)+pow((ay-cy),2);
  if(n==m&&m1==n1&&m1==m){
    cout << "It’s a square";
    }else{
    cout << "Not a square";
  }
}

30分

是扩展,老师也不讲 :melting_face:

30分自己调啊,我们没有这种题(杭州)

前面有个人说要连对角线,对角线咋连?