首页 > 编程语言 >华为OD机试E卷 –构成的正方形数量–24年OD统一考试(Java)

华为OD机试E卷 –构成的正方形数量–24年OD统一考试(Java)

时间:2025-01-22 22:27:22浏览次数:3  
标签:24 count Java int OD new util import java

题目描述

输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数星。(内积为零的的两个向量垂直)

输入描述

第─行输入为N,N代表坐标数量,N为正整数, N≤ 100
之后的N行输入为坐标xy以空格分隔,x,y为整数,-10≤x,y ≤10

输出描述

输出可以构成的正方形数量

用例

输入

3
1 3
2 4
3 1

输出

0

说明
3个点不足以构成正方形

输入

4
0 0
1 2
3 1
2 -1

输出

1

 这里我又加了一个案例,使题目问题更加具体

输入

4
0 0
1 2
3 1
2 -1

-2 1
-1 3

输出

2

说明
此4点可构成正方形

 注:以下代码是我硬莽出来的,解题代码比较稚嫩,代码性能优化不是太好,如果,有问题请多包涵!

java代码 

package odTest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class square {
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int inputNum = Integer.parseInt(scanner.nextLine());
		List<int[]> list = new ArrayList<int[]>();//存放输入的 坐标
		boolean[] hasUsed = new boolean[inputNum]; 
		while(inputNum>0) {
			int[] index = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
			list.add(index);
			inputNum--;
		}
		int count = 0;//记录有几个正方形
        count = copeData(list,new ArrayList<int[]>(),count,hasUsed,0,new HashSet<Integer>());
        System.out.println(count);
	}
    //list 存放输入的坐标,arraylist存放正方形的四个顶点,
    //hasUse过滤使用过的点(防止重复用点,内存溢出),
    //judgeNum和containJudge:避免重复鉴定四个顶点,下标之和具有唯一性,避免反复鉴定,
	private static int copeData(List<int[]> list, ArrayList<int[]> arrayList, int count, boolean[] hasUsed, int judgeNum,HashSet<Integer> containJudge) {
		if(arrayList.size()==4 && !containJudge.contains(judgeNum)) {
			containJudge.add(judgeNum);
			count  = judgeSquare(arrayList)? count+1:count;
			return count;
		}else if(arrayList.size()==4){
			return count;
		}
		for(int i = 0;i<list.size();i++) {
			if(hasUsed[i] == true) {
				continue;
			}
			hasUsed[i] = true;
			arrayList.add(list.get(i));
			judgeNum = judgeNum+i;
			count = copeData(list,arrayList,count,hasUsed,judgeNum,containJudge);
			hasUsed[i] = false;
			arrayList.remove(arrayList.size()-1);
			judgeNum = judgeNum-i;
		}
		return count;
		
	}

	//判断内积是否为0
	private static boolean judgeSquare(ArrayList<int[]> arrayList) {
		int countRect = 0;
		List<Integer> vectorList = new ArrayList<Integer>();
		for(int i=0;i<arrayList.size();i++) {
			for(int j=i+1;j<arrayList.size();j++) {
				//获取两点之间的距离
				int straightLine = (arrayList.get(i)[0]-arrayList.get(j)[0])*(arrayList.get(i)[0]-arrayList.get(j)[0])
						+(arrayList.get(i)[1]-arrayList.get(j)[1])*(arrayList.get(i)[1]-arrayList.get(j)[1]);
				
				if(!vectorList.contains(straightLine)) {
					vectorList.add(straightLine);
				}else {
					countRect++;
				}
				if(countRect == 4) {
					return true;
				}
			}
		}
		return false;
	}

}

标签:24,count,Java,int,OD,new,util,import,java
From: https://blog.csdn.net/lovely_compiler/article/details/145311503

相关文章

  • 谷歌2024年12月AI公告:你必须知道的十大要点!
    2024年12月是不是科技圈都被OpenAI12天的吸引了呢?但是就像汪峰定律一样,头条往往被其他人抢去,今天就和大家一起盘点一下谷歌2024年年尾的一些新动态:1、Whisk:图像生成模型2024年12月17日推出,Whisk允许用户上传图像指定主题、场景和风格来生成图像,无需长文本提示。也能用谷歌......
  • 前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!
    引言  时光飞逝,2024年已经来临,回顾过去一年,科技的迅猛进步简直让人目不暇接。  在人工智能(AI)越来越强大的今天,我们不再停留在幻想阶段,量子计算的雏形开始展示它的无穷潜力,Web3.0的去中心化理念也在不断改变着我们对互联网的认知。作为一名生活与技术息息相关的人,我越......
  • 咱们继续学Java——高级篇 第二百二十八篇:之Java 2D图形编程之通过系统剪贴板传递Java
    咱们继续学Java——高级篇第二百二十八篇:之Java2D图形编程之通过系统剪贴板传递Java对象在Java学习的征程中,我们不断探索知识的边界,每一次对新功能的深入学习都是成长的宝贵机会。我写这篇博客的目的,就是希望与大家一同学习Java2D图形编程中如何通过系统剪贴板传递Java......
  • 2025Java基础知识总结(超详细整理)
    Java语言的特点1.面向对象面向对象(OOP)就是Java语言的基础,也是Java语言的重要特性。面向对象的概念:生活中的一切事物都可以被称之为对象,生活中随处可见的事物就是一个对象,我们可以将这些事物的状态特征(属性)以及行为特征(方法)提取并出来,并以固定的形式表示。2.简单好用......
  • Java程序员简历必写的Spring全家桶技术,这份全彩总结是我见过最全的!
    对于Java程序员来说,掌握Spring全家桶(包括SpringFramework、SpringBoot、SpringCloud)是提升职业竞争力的关键所在。而这份全彩的学习总结,堪称是最全面的学习指南,它为开发者提供了一条清晰的学习路径。本文将深入探讨这份资料的独特价值及其对开发者学习旅程的指导作用。......
  • Java编程规范-常量定义
    常量定义规范【强制】常量不允许任何魔法值(即未经定义的常量)直接出现在代码中。反例:Stringkey="Id#taobao_"+tradeId;cache.put(key,value);【强制】long或者Long初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1混淆,造成误解。说明:Longa=2l;......
  • Codeforces Round 998 (Div. 3)(部分题解)
    补题链接A. Fibonacciness思路:了解清楚题意,求得是最大的斐波那契的度,数组只有5个数(最多度为3),能列出其对应的式子 或 或#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){intn,m,k;vector<int>a(4);set<int>s;......
  • Java的控制流程
    Java的控制流程1.Scanner对象Java.util.Scanner是Java5的新特性,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取我们一般需要使用hasNext()与hasNextLine()判断......
  • 【Java安全】基础汇总
    一、JAVA安全1.1java的序列化和反序列化Java序列化是指把Java对象转换为字节序列的过程ObjectOutputStream类的writeObject()方法可以实现序列化Java反序列化是指把字节序列恢复为Java对象的过程ObjectInputStream类的readObject()方法用于反序列化。1、序列化:将......
  • NOIP 2024 游记
    省流:比CSP高。可见我CSP打的有多差。Day-?NOIP模拟赛就没有上过250。每场都是爆爆爆。Day-1带上了南极星给的挂坠。然后在火车上被刮破了。啊啊啊我对不起你。这次在火车上没有开摆,因为后有L前有BW根本没有好的卡视角的位置。中午晚上吃的都是燕大食堂,听说高......