华为OD-计算正方形数量

news2025/3/1 0:16:09

华为OD-计算正方形数量

  • 题目
    • 解题思路
    • 源码实现

题目

在这里插入图片描述

解题思路

由于是构成正方形 再结合用例1 很容易直接写出第一行代码

	const pointCount = await readline();
    if (pointCount < 4) {
        console.log(0);
        return;
    }

在这里插入图片描述

然后就是典型的数学题,什么才能构成正方形(这题题主不会,看了解析之后才恍然通透)直接揭秘
以用例2为🌰

在这里插入图片描述
这里拿前两个点做文章也就是0 0, 1 2
在这里插入图片描述
如果要以这两个点形成正方形,那么只能有两种可能
在这里插入图片描述
那么(0,0)和(2,1)所“期望”的点组是(3,-1)(1,-2)和(1,3)(-1,2)
可以很容易推算出期望点组1的位置是(点1x坐标值+y轴偏移量,点1y坐标值-x偏移量) (点2x坐标值+y轴偏移量,点2y坐标值-x偏移量)

(点1x坐标值+y轴偏移量,点1y坐标值-x偏移量) = (0 + 1,0 - 2) = (-1, -1)
(点2x坐标值+y轴偏移量,点2y坐标值-x偏移量) = (2 + 1,1 - 2) = (3, -1)

期望点组2的位置是(点1x坐标值-y轴偏移量,点1y坐标值+x偏移量) (点2x坐标值-y轴偏移量,点2y坐标值+x偏移量)

(点1x坐标值-y轴偏移量,点1y坐标值+x偏移量) = (0 - 1,0 + 2) = (-1, 2)
(点2x坐标值-y轴偏移量,点2y坐标值+x偏移量) = (2 - 1,1 + 2) = (1, 3)

所以我们只需要确认我们初始的输入内有(3,-1)(1,-2)或者(-1,2)(1,3)就一定能组成正方形!
算法思路 遍历初始化输入的点组,每两个点为一组,找到他们的期望点组,如果存在于初始输入,则结果+1.最后输出/4.
这里解释一下为什么要/4,还是以上面的为🌰.
我们初始化输入(0,0)(1,2)(3,-1)(1,-2)对应图中的A,B,E,F点,以A,B点为起点可以找到EF点,结果+1,但是BF可以找到AE组成正方形,FE可以找到AB,EA可以找到BF.所以最后的结果是实际结果的4倍(对应正方形的四条边)

源码实现

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void (async function () {
    // Write your code here
    const pointCount = await readline();
    if (pointCount < 4) {
        console.log(0);
        return;
    }
    let index = 0;
    const pointPositionList = [];
    do {
        const pointPosition = (await readline()).split(" ");
        pointPositionList.push(pointPosition.map(Number).join(' '));
        index++;
    } while (index < pointCount);


    // 用一个数组来保存已经找出的所有正方形
    const squareCountList = [];

    let squareCount = 0


    for (let i = 0; i < pointCount; i++) {
        for (let j = i + 1; j < pointCount; j++) {
            const position_1 = pointPositionList[i].split(' ').map(Number);
            const position_2 = pointPositionList[j].split(' ').map(Number);
            // 任意两点的X轴偏移量

            const transformX = position_1[0] - position_2[0];
            // 任意两点的Y轴偏移量
            const transformY = position_1[1] - position_2[1]
            // console.log(transformX, transformY)
            // 期望点坐标1
            const expectPoint_1 = `${position_1[0] + transformY} ${position_1[1] - transformX}`
            
          
            // 期望点坐标2
            const expectPoint_2 = `${position_2[0] + transformY} ${position_2[1] - transformX}`
            // 期望点坐标3
            const expectPoint_3 = `${position_1[0] - transformY} ${position_1[1] + transformX}`
            // 期望点坐标4
            const expectPoint_4 = `${position_2[0] - transformY} ${ position_2[1] + transformX}`
            // console.log('期望点组2', expectPoint_3, expectPoint_4)
            if(pointPositionList.includes(expectPoint_1) && pointPositionList.includes(expectPoint_2)){
                squareCount ++
            }

            if(pointPositionList.includes(expectPoint_3) && pointPositionList.includes(expectPoint_4)){
                squareCount ++
            }

        }
    }

    console.log(squareCount / 4);
})();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 rvest 包快速抓取网页数据:从入门到精通

介绍 随着大数据和数据科学的迅速发展&#xff0c;互联网数据的抓取已经成为重要的信息获取手段之一。网页抓取&#xff08;Web Scraping&#xff09;可以帮助我们自动化地从网页中提取有价值的数据&#xff0c;应用广泛&#xff0c;包括新闻热点分析、金融数据采集等。在本篇…

【机器学习】【集成学习——决策树、随机森林】从零起步:掌握决策树、随机森林与GBDT的机器学习之旅

这里写目录标题 一、引言机器学习中集成学习的重要性 二、决策树 (Decision Tree)2.1 基本概念2.2 组成元素2.3 工作原理分裂准则 2.4 决策树的构建过程2.5 决策树的优缺点&#xff08;1&#xff09;决策树的优点&#xff08;2&#xff09;决策树的缺点&#xff08;3&#xff0…

【Rust自学】4.2. 所有权规则、内存与分配

4.2.0 写在正文之前 在学习了Rust的通用编程概念后&#xff0c;就来到了整个Rust的重中之重——所有权&#xff0c;它跟其他语言都不太一样&#xff0c;很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节&#xff1a; 所有权&#xff1…

Mamba安装环境和使用,anaconda环境打包

什么是mamba Mamba是一个极速版本的conda&#xff0c;它是conda的C重新实现&#xff0c;使用多线程并行处理来加速包和依赖项的下载。 Mamba旨在提高安装、更新和卸载Python包的速度&#xff0c;同时保持与conda相同的兼容性和命令行接口。 Mamba的核心部分使用C实现&#xff…

Vue前端开发-数据缓存

完成全局性的axios实例对象配置后&#xff0c;则可以在任意一个组件中直接调用这个对象&#xff0c;发送异步请求&#xff0c;获取服务端返回的数据&#xff0c;同时&#xff0c;针对那些不经常变化的数据&#xff0c;可以在请求过程中&#xff0c;进行数据缓存&#xff0c;并根…

Composer指定php版本执行(windows)

✔️指定php版本执行&#xff08;windows&#xff09; 正常用法如下 /usr/bin/php7.1 /usr/local/bin/composer require xxxx 通过alias 简化指定PHP版本的路径 alias .php7_composer‘/d/application/phpstudy_pro/Extensions/php/php7.3.4nts/php /d/application/phpstudy_pr…

搭建私有链

文章目录 1. 准备工作2. 创建创世区块配置文件2.1 创建数据目录2.2 创建创世区块配置文件1. “config”部分2. “alloc”部分3. “coinbase”4. “difficulty”5. “extraData”6. “gasLimit”7. “nonce”8. “mixhash”9. “parentHash”10. “timestamp” 3. 初始化&#x…

游戏AI实现-寻路算法(BFS)

广度优先搜索算法&#xff08;英语&#xff1a;Breadth-first search&#xff0c;缩写&#xff1a;BFS&#xff09;&#xff0c;又译作宽度优先搜索&#xff0c;或横向优先搜索&#xff0c;是一种图形搜索算法。 寻路地图搭建&#xff1a; 游戏AI实现-寻路地图搭建-CSDN博客 …

k-均值聚类(k-Means Clustering)详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

复合机器人为生产提供精准的建议和决策支持

在现代化生产的浪潮中&#xff0c;智能复合机器人以其卓越的性能和高度智能化特点&#xff0c;正成为保障生产安全与可靠性的重要力量。 智能复合机器人具备精确的感知、判断和决策能力&#xff0c;能够在复杂的生产环境中自主导航、精确操作&#xff0c;避免了人为因素可能导致…

AI前沿分析:Github Copilot 推出免费版本,AI + 编程更高效!

名人说&#xff1a;莫听穿林打叶声&#xff0c;何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、GitHub Copilot&#xff1a;AI编程的“革命性”助力二、免费版本上线&#xff1a;AI编程的普及时代&…

git使用教程(超详细)-透彻理解git

一.核心基础 核心概念有六个 首先请把与svn有关的一切概念暂时从你的脑海中移除掉&#xff0c;我们要重新认识本文所讲述的所有概念。这非常重要。 1.worktree worktree是一个目录&#xff0c;你在这里对文件进行增加、删除、修改。也就是我们常说的工作区。在git中worktree…

【优选算法---分治】快速排序三路划分(颜色分类、快速排序、数组第K大的元素、数组中最小的K个元素)

一、颜色分类 题目链接: 75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 题目介绍&#xff1a; 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地 对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序…

第六周作业

完成的作业&#xff1a; 1、自建yum仓库&#xff0c;分别为网络源和本地源 执行步骤&#xff1a;将光盘挂载到目录设置为本地源。 再将光盘挂载到http目录下实现ip访问&#xff0c;实现网络源。 编辑/etc/yum.repos.d/rocky.repo修改源 [base] namecd baseurlfile:///mnt/cd/…

PHP木马编写

一、最简单的一句话木马 <?php eval($_REQUEST[cmd]); ?> 1. <?php 和 ?> <?php 和 ?> 是 PHP 代码的开始和结束标记&#xff0c;表示 PHP 代码块的范围。 2. eval() eval() 是 PHP 中的一个内建函数&#xff0c;用来执行字符串类型的 PHP 代码。…

面试题整理3----nc命令的常见用法

面试题整理3----nc命令的常见用法 1. NC是什么2. NC的常用参数2.1 开启指定端口TCP监听(-l小写的L)2.2 测试端口是否能访问(-v)2.3 开启指定端口UDP监听(-u)2.4 端口扫描(-z)2.5 指定超时时间(-w)2.6 指定本地端口号连接(-p)2.7 指定的命令(-e) 1. NC是什么 nc&#xff08;Net…

智源大模型通用算子库FlagGems四大能力升级 持续赋能AI系统开源生态

FlagGems是由智源研究院于2024年6月推出的面向多种AI芯片的开源大模型通用算子库。FlagGems使用Triton语言开发&#xff0c;在Triton生态开源开放的基础上&#xff0c;为多种AI芯片提供开源、统一、高效的算子层生态接入方案。FlagGems沿着统一的中间语言、统一的算子接口和统一…

每天40分玩转Django:Django部署

Django部署 一、今日学习内容概述 学习模块重要程度主要内容生产环境配置⭐⭐⭐⭐⭐settings配置、环境变量WSGI服务器⭐⭐⭐⭐⭐Gunicorn配置、性能优化Nginx配置⭐⭐⭐⭐反向代理、静态文件安全设置⭐⭐⭐⭐⭐SSL证书、安全选项 二、生产环境配置 2.1 项目结构调整 mypr…

JDK21执行java -jar xxx.jar 文件时 “An unexpected error occurred” 问题处理

背景介绍&#xff1a;因langchain4j最新版本&#xff08;>0.36.0&#xff09;&#xff08;Min JDK version has been upgraded to 17&#xff09;需JDK17起&#xff0c;故直接使用Amazon Corretto JDK 21作为基础镜像。 在使用 JDK21 进行开发或运行相关应用时&#xff0c;有…

人工智能:人机交互和用户体验:相关学点、两者关系、未来趋势

目录 相关学点 HCI 与 UX 的关系 当前趋势和未来展望 人机交互&#xff08;Human-Computer Interaction, HCI&#xff09;和用户体验&#xff08;User Experience, UX&#xff09;是现代设计和工程领域的重要概念&#xff0c;尤其在软件开发、网站设计和产品设计中起着关键作…