华为OD机试 - 构成正方形的数量 - 数据结构map(Java 2023 B卷 100分)

2023-09-22 08:27:36

在这里插入图片描述

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

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

二、输入描述

第一行输入为N,N代表坐标数量,N为正整数。
之后的N行输入为坐标x y,以空格分隔。

x,y为整数,-10<=x,y<=10

三、输出描述

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

四、Java算法源码

package com.guor.od;

import java.util.*;

public class OdTest {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        // 坐标数量
        int N = sc.nextInt();

        // 3个坐标构不成正方形
        if (N <= 3) {
            System.out.println(0);
            return;
        }

        // 存储坐标x y的集合
        List<int[]> list = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            // 坐标x y
            int[] arr = new int[2];
            arr[0] = sc.nextInt();
            arr[1] = sc.nextInt();
            list.add(arr);
        }

        int count = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < list.size() - 1; i++) {
            for (int j = i + 1; j < list.size(); j++) {
                int dist = getLength(list.get(i), list.get(j));
                map.put(dist, map.getOrDefault(dist, 0) + 1);
            }
        }

        for (int v : map.values()) {
            count += v * (v - 1) * (v - 2) * (v - 3) / 24;
        }
        System.out.println(count);
    }

    public static int getLength(int[] a, int[] b) {
        int x = a[0] - b[0];
        int y = a[1] - b[1];
        return x * x + y * y;
    }
}

五、效果展示

1、输入

4
0 0
1 2
3 1
2 -1

2、输出

1

3、说明

在这里插入图片描述

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

更多推荐

51单片机4【玩转开发板】

1.开发板完全介绍1.配件2.开发板主板及板载原件1.单片机(1)注意不要装反了,凹槽的一面向上是正的(2)不要再开电的时候取下或者装上。2.单片机工作必备的外围电路1.晶振2.复位电路3.电源供电电路4.USB下载电路3.其他的外围设备(1)数码管(2)插口(3)电池(4)独立按键矩阵按键3.上电前的准备工作1.检查

服务器为什么要一直开机?

很多人在选择服务器的时候会想要省钱,然后就想要自己搭建一个服务器,其实服务器呢是需要24小时一直开机的,一般服务器的工作时间是3-5年,它们第一次开机后就会一直到机器故障淘汰才会关机哦,这是为什么呢?今天就让小编来讲一讲吧。首先我们来讲一讲服务器本身,服务器是在网络中为PC端、智能手机登提供计算应用服务的,就像服务器如

Android的View绑定实现----编译时注解实现findViewById和setOnClickListener方式

标题有点长,相信用过xUtils和ButterKnife框架的都知道啥意思,他们都可以通过注解的方式省去繁琐的findViewById和setOnClickListener代码的编写。他们2者的实现原理不一样,前者用的是运行时注解,后者用的是编译时注解,对于不同的注解,会有不同的注解处理器,针对运行时注解会采用反射机制

Java高级-反射

目录认识反射、获取类反射(Reflection)反射可进行的操作加载类,获取类的字节码:Class对象获取对象的三种方法获取构造器对象并使用获取构造器的方法获取构造器的作用获取成员变量和方法对象并使用获取类的成员变量的方法获取类的成员变量的作用获取成员方法的方法获取成员方法的作用认识反射、获取类反射(Reflectio

JVM--Java类加载器笔记

Java类加载器代码经过编译变成了字节码打包成Jar文件。让JVM去加载需要的字节码,变成持久代/元数据区上的Class对象,接着执行程序逻辑。类声明周期和加载过程步骤:加载->链接(校验->准备->解析)->初始化->使用->卸载加载:根据明确知道的class完全限定名,来获取二进制classfile格式的字节流(找

算法讨论题 —— Java实现两数之和

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。即:每个index上的数字只能用一次。示例给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]解答这个题目的原题是在:力扣(Leet

Zookeeper分布式锁的概念及原理

文章目录1.Zookeeper分布式锁的概念2.分布式锁的实现方式3.Zookeeper分布式锁的原理1.Zookeeper分布式锁的概念分布式锁的概念图如下:一种演变过程。在我们进行单机应用程序开发时,往往会涉及到并发同步的问题,一般都会采用synchronized或者Lock锁的方式来解决多线程间的代码同步问题,这

EM3DANI包详解:使用Julia语言进行3D频域电磁数据建模的终极指南

第一部分:EM3DANI包的简介与安装1.EM3DANI包简介EM3DANI是一个强大的工具包,专门为那些希望使用Julia语言进行频域电磁(CSEM和MT)数据的3D建模的研究者和开发者设计。它支持各向同性和各向异性建模,使得用户可以更加灵活地进行电磁数据的模拟和分析。频域电磁(CSEM和MT)技术在地球物理勘探、矿

Leetcode.2826 将三个组排序

题目链接Leetcode.2826将三个组排序rating:1721题目描述给你一个下标从000开始长度为nnn的整数数组numsnumsnums。从000到n−1n-1n−1的数字被分为编号从111到333的三个组,数字iii属于组nums[i]nums[i]nums[i]。注意,有的组可能是空的。你可以执行以下操作

[C语言]栈与队列——喵喵队,冲冲冲

宝子,你不点个赞吗?不评个论吗?不收个藏吗?最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!!喵喵喵,你对我真的很重要。目录前言栈栈的实现队列队列的实现总结前言实践,实践,实践,多练几遍力扣,牛客的题。落实到脚下。栈栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作

Ubuntu安装RabbitMQ server - 在外远程访问

文章目录前言1.安装erlang语言2.安装rabbitMQ3.内网穿透3.1安装cpolar内网穿透(支持一键自动安装脚本)3.2创建HTTP隧道4.公网远程连接5.固定公网TCP地址5.1保留一个固定的公网TCP端口地址5.2配置固定公网TCP端口地址前言RabbitMQ是一个在AMQP(高级消息队列协议)基础上完

热文推荐