题解 | #正方形检测#

正方形检测

https://ac.nowcoder.com/acm/problem/21842

解决此题的关键性在于明白证明一个形状为正方形的条件,首先是四条边相等,在加上有一个直角或者有一对边是平行线,即满足是一个正方形。而我们则采用“倒推”的形式解决此题,首先,如果一个形状是正方形,那么四点构成的边则有四条,分别是四条边+两条对角线,显然对角线是根号2倍的边长。明白了这些,我们开始着手做题,首先把六条边分别求出来,再利用数组中的sort()方法对六条边进行排序,如果排序的结果符合前四个结果相等,后两个结果相等且是前四个结果的根号2倍的,那就判为是正方形,否则则不是。 import java.util.*; public class Main {

public static void main(String[] args) {
	
	Scanner sc=new Scanner(System.in);
	int[] X=new int[4];
	
	for(int i=0;i<4;i++) {
		X[i]=sc.nextInt();
	}
    int[] Y=new int[4];
	for(int j=0;j<4;j++) {
		Y[j]=sc.nextInt();
	}
    int[] z=new int[6];
     z[0]=Math.abs(X[0]-X[1])*Math.abs(X[0]-X[1])+Math.abs(Y[0]-Y[1])*Math.abs(Y[0]-Y[1]);
   	 z[1]=Math.abs(X[0]-X[2])*Math.abs(X[0]-X[2])+Math.abs(Y[0]-Y[2])*Math.abs(Y[0]-Y[2]);
   	 z[2]=Math.abs(X[0]-X[3])*Math.abs(X[0]-X[3])+Math.abs(Y[0]-Y[3])*Math.abs(Y[0]-Y[3]);
   	 z[3]=Math.abs(X[1]-X[2])*Math.abs(X[1]-X[2])+Math.abs(Y[1]-Y[2])*Math.abs(Y[1]-Y[2]);
   	 z[4]=Math.abs(X[1]-X[3])*Math.abs(X[1]-X[3])+Math.abs(Y[1]-Y[3])*Math.abs(Y[1]-Y[3]);
   	 z[5]=Math.abs(X[2]-X[3])*Math.abs(X[2]-X[3])+Math.abs(Y[2]-Y[3])*Math.abs(Y[2]-Y[3]);
 Arrays.sort(z);

// int count=0; // for(int k=0;k<6;k++) { // // if(z[k]==z[3]) { // count++; // } // // } if(z[0]==z[1] && z[1]==z[2] && z[2]==z[3] && z[4]==z[5]) { System.out.println("It's a square"); } else { System.out.println("Not a square"); }

// System.out.print(a+" "); // System.out.print(b+" "); // System.out.print(c+" "); // System.out.print(d+" "); // for(int i=0;i<6;i++) { // System.out.print(z[i]+" "); // } }

}

全部评论

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务