中望软件笔试

2023-11-06


前言

       简单记录一下笔试情况。

一、判断一点是否在三角形中

题目简介

       输入四个二维坐标,前三个点表示一个三角形,判断最后一个点是否在其内(不包含恰好在边上的情况)。

一、面积

       海伦公式:p=(a+b+c)/2,S=sqrt(p*(p-a)*(p-b)*(p-c));
       假设三角形三个点为A,B,C,若O点位于三角形内,则有:S(ABC)=S(ABO)+S(ACO)+S(BCO)。并且任意一个小三角形面积不为0,例如:S(ABO)=0,表示 O 点落于AB边上。

代码实现

      

import java.math.BigDecimal;
public class Solution {
    public boolean judge (double[] point1, double[] point2, double[] point3, double[] point) {
        double S=getArea(point1,point2,point3);
        double S1=getArea(point1,point2,point),
                S2=getArea(point1,point3,point),
                S3=getArea(point2,point3,point);
//        if(S1==0.0||S2==0.0||S3==0.0||Math.abs(S-S1-S2-S3)<1e-6)// 误差精度:0.000001;
//            return false;
//        return true;

        //或者采用 BigDecimal
        BigDecimal s1=BigDecimal.valueOf(S1),
                s2=BigDecimal.valueOf(S2),
                s3=BigDecimal.valueOf(S3);
        BigDecimal s=BigDecimal.valueOf(S);
        BigDecimal a=new BigDecimal("0.0");
        if(s1.compareTo(a)==0||s2.compareTo(a)==0||s3.compareTo(a)==0||s.compareTo(s1.add(s2).add(s3))!=0)
            return false;
        return true;
    }
    private double getArea(double[] a,double[] b,double[] c){
        double ab=Math.sqrt(Math.pow(b[1]-a[1],2)+Math.pow(b[0]-a[0],2));
        double ac=Math.sqrt(Math.pow(c[1]-a[1],2)+Math.pow(c[0]-a[0],2));
        double bc=Math.sqrt(Math.pow(b[1]-c[1],2)+Math.pow(b[0]-c[0],2));
        double p=(ab+bc+ac)/2;
        return Math.sqrt(p*(p-ab)*(p-ac)*(p-bc));
    }
}

二、向量

       由于double数比较时存在精度损失,对于某些情况可能会产生错误的结果。

       二维坐标系中:A(x1,y1) 和 B(x2,y2) 构成的向量 AB(A指向B):(x2-x1,y2-y1);

       AB(x1,y1), BC(x2,y2) :
       向量点乘:AB · AC=|AB|*|AC|*cosθ = x1*y1+x2*y2; 若 AB // AC,则点乘结果和|AB|*|AC|相等。

       向量叉乘:AB x AC = (x1*y2,x2*y1); 叉乘生成一个第三维的向量,其大小为 |AB|*|AC|*sinθ,方向通过右手法则来判定:(x1*y2-x2*y1的值为正,其方向指向z轴正方向;为负指向z轴负方向(可以采用向量 (1,1) 分别与 (1,0) (0,1) 尝试验证);为零时,两向量平行。
https://zhuanlan.zhihu.com/p/359975221
https://zhuanlan.zhihu.com/p/356529702

代码实现

public class Solution {
    public boolean judge (double[] point1, double[] point2, double[] point3, double[] point) {
        // 将三个点 逆时针 排列,
        if(getDirect(point1,point2,point3))// 1,2,3 逆时针排列。
            return getDirect(point1,point2,point)&&getDirect(point2,point3,point)
                    &&getDirect(point3,point1,point);
        else   //顺序为 1,3,2
            return getDirect(point1,point3,point)&&getDirect(point3,point2,point)
                    &&getDirect(point2,point1,point);
    }
    private boolean getDirect(double[] a,double[] b,double[] c){ // 点 c 是否在 ab向量的左侧,即叉乘结果大于0
        double x1=b[0]-a[0],y1=b[1]-a[1];
        double x2=c[0]-a[0],y2=c[1]-a[1];
        return x1*y2-y1*x2>0;
    }
}

二、求矩阵中的最小步数

题目简介

       二维数组中 n*m,值为0或者1,0表示可以通过,1表示不能通过。求从(0,0)处走到(n-1,m-1)处所需要的最小步数(一次只能走一步)

       题目保证可以从 (0,0)可以走到(n-1,m-1)。

代码实现

import java.util.*;
public class Solution {
    /**
     * @param map int整型二维数组
     * @return int整型
     */
    public int floodFill(int[][] map, int n, int m) {
        // write code here
        Deque<int[]> q=new ArrayDeque<>();
        int[] x={1,-1,0,0},y={0,0,1,-1};
        int step=0;
        q.offer(new int[]{0,0,0});
        map[0][0]=1;
        int res=Integer.MAX_VALUE;
        while(!q.isEmpty()){
            int t=q.size();
            step++;
            int newX,newY;
            while(t--!=0){
                int[] tmp=q.poll();
                if(tmp[0]==n-1&&tmp[1]==m-1)
                    return tmp[2];

                for(int i=0;i<4;i++){
                    newX=tmp[0]+x[i];
                    newY=tmp[1]+y[i];
                    if(newX>=0&&newX<n&&newY>=0&&newY<m&&map[newX][newY]==0){
                        q.offer(new int[]{newX,newY,step});
                        map[newX][newY]=1;
                    }
                }
            }

        }
        return 0;
    }
    public static void main(String[] args) {
        int[][] a=new int[][]{
                {0,0,0,0},
                {0,0,0,0},
                {0,0,0,0},
                {0,0,0,0}
        };
        Solution s=new Solution();
        int res=s.floodFill(a,4,4);
        System.out.println(res);
    }
}

总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

中望软件笔试 的相关文章

  • Java中ArrayList的交集和并集

    有什么方法可以做到这一点吗 我正在寻找 但没有找到 另一个问题 我需要这些方法 以便我可以过滤文件 有些是AND过滤器 有些是OR过滤器 就像集合论中的那样 所以我需要根据所有文件和保存这些文件的联合 相交 ArrayList 进行过滤 我
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 不同帐户上的 Spring Boot、JmsListener 和 SQS 队列

    我正在尝试开发一个 Spring Boot 1 5 应用程序 该应用程序需要侦听来自两个不同 AWS 帐户的 SQS 队列 是否可以使用 JmsListener 注解创建监听器 我已检查权限是否正确 我可以使用 getQueueUrl 获取
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何使用assertEquals 和 Epsilon 在 JUnit 中断言两个双精度数?

    不推荐使用双打的assertEquals 我发现应该使用带有Epsilon的形式 这是因为双打不可能100 严格 但无论如何我需要比较两个双打 预期结果和实际结果 但我不知道该怎么做 目前我的测试如下 Test public void te
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Spring Boot 无法更新 azure cosmos db(MongoDb) 上的分片集合

    我的数据库中存在一个集合 documentDev 其分片键为 dNumber 样本文件 id 12831221wadaee23 dNumber 115 processed false 如果我尝试使用以下命令通过任何查询工具更新此文档 db

随机推荐

  • 探针漏洞_长亭xray:一款自动化Web漏洞扫描神器(免费社区版)

    xray 简介 xray 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器 支持主动 被动多种扫描方式 自备盲打平台 可以灵活定义 POC 功能丰富 调用简单 支持 Windows macOS Linux 多种操作系统 可以满足广大安全从业
  • java删除指定目录下的文件(包括目录)

    代码 import java io File public class Test 判断指定的文件或文件夹删除是否成功 param FileName 文件或文件夹的路径 return true or false 成功返回true 失败返回fa
  • 网络综合布线实训室方案(2023版)

    综合布线实训室概述 随着智慧城市的蓬勃发展 人工智能 物联网 云计算 大数据等新兴行业也随之崛起 网络布线系统作为现代智慧城市 智慧社区 智能建筑 智能家居 智能工厂和现代服务业的基础设施和神经网络 发挥着重要作用 实践表明 网络系统故障的
  • 使用web3 部署智能合约

    CentOS 7 环境 web3安装 及 对象的创建 m0 47233175的博客 CSDN博客https blog csdn net m0 47233175 article details 121960931还未安装web3环境 请参照以
  • 《OpenGL ES 2.0 Programming Guide》摘录

    一 Introduction toOpenGL ES 2 0 1 What Is OpenGL ES OpenGL ES is an application programming interface API for advanced 3D
  • JPA中所有findBy语法规则(举例)

    JPA中findBy基本语法规则 1 首先先新建一个数据库 名字叫做jpatest 2 新建一个SpringBoot项目 如果新手还不会 请先阅读idea中如何快速创建SpringBoot项目 这边需要引入jpa mysql web的相关依
  • 深刻理解Linux进程间通信(IPC)

    http www cnblogs com andtt articles 2136279 html 0 序 1 管道 1 1 管道概述及相关API应用 1 2 有名管道概述及相关API应用 1 3 小结 1 4 参考资料 2 信号 上 2 1
  • 详解DenseNet(密集连接的卷积网络)

    前言 在计算机视觉领域 卷积神经网络 CNN 已经成为最主流的方法 比如最近的GoogLenet VGG 19 Incepetion等模型 CNN史上的一个里程碑事件是ResNet模型的出现 ResNet可以训练出更深的CNN模型 从而实现
  • C++中enum的大小

    关于枚举类型所占内存的大小 书里对枚举大小的定义是 sizeof枚举是sizeof某类可以包含枚举range的整型 并且不会大于sizeof int 也就是说枚举大小不一定等于sizeof int 转载请尊重原创 保留相关链接本文来自多宝平
  • MySQL限制数据的小数位数——DECIMAL类型

    DECIMAL简介 DECIMAL从MySQL 5 1引入 列的声明语法是DECIMAL M D NUMERIC与DECIMAL同义 如果字段类型定义为NUMERIC 则将自动转成DECIMAL 对于声明语法DECIMAL M D 自变量的
  • 蓝斯登定律(转载)

    给员工快乐的工作环境 蓝斯登定律 给员工快乐的工作环境 跟一位朋友一起工作 远较在父亲之下工作有趣得多 提出者 美国管理学家蓝斯登 点评 可敬不可亲 终难敬 有权没有威 常失权 编辑 从案例中体会蓝斯登定律 连续20年保持赢利的美国西南航空
  • 机器学习特征工程

    特征工程 目录 特征工程 1 数据预处理 1 1数据无量纲化 1 2缺失值处理 1 3处理分类型特征 编码与哑变量 1 4处理连续型特征 二值化与分段 1 5数据变换 总结 2 特征选择 2 1 Filter 2 1 1 方差选择法 2 1
  • Qt Creator打开CMake管理的Quick工程,并调试qml

    文章目录 前言 一 需求背景 二 遇到的问题 三 解决方案 四 Demo 提示 以下是本篇文章正文内容 下面案例可供参考 一 需求背景 1 需要对Qml程序进行调试 2 用CMake管理工程文件 3 能用Qt Creator或者VS进行开发
  • 数据库之postgresql库锁表解锁

    1 检索出死锁进程的ID SELECT FROM pg stat activity WHERE datname 死锁的数据库ID 检索出来的字段中 wating 字段 数据为t的那条 就是死锁的进程 找到对应的 procpid 列的值 2
  • LWIP UDP 编程

    一 udp c实现的函数 1 void udp input struct pbuf p struct netif inp 说明 处理接收到的udp数据包 参数 p数据包缓存区 inp网络接口 2 err t udp send struct
  • 树的层次遍历(广度优先搜索BFS)

    解题思路 采用树的层次遍历的方式 在图中叫广度优先遍历 使用队列取存储待遍历的节点 程序的结束就是队列为空 1 整体上 出队列的节点指向队列中的0号元素 比如1遍历完成之后2 3进队列 2出队列 那么2的next指向队列中的0号元素即可 但
  • MySQL Command Line 语句无效

    在cmd中输入sql语句回车后没反应 只有 gt 提示继续输入 如下图 原因 结尾未输入分号 以结束sql语句 在后面添加分号 英文输入法 即可
  • .NET开发必看资料53个+经典源码77个

    NET开发必看资料53个 经典源码77个 2012 07 01 23 12 4546人阅读 评论 1 收藏 举报 net asp net c java winform 编程 简单描述 为大家整理了下载中心 net资料 都是比较热的 好评率比
  • MIC—BIAS

    MIC BIAS为麦克的直流偏置电压 1 你说的mic bias应该说的是主板上麦克的偏置电压 偏置电压是由英文bias voltage翻译得到的 2 在电子技术课程中 我们知道 由三极管组成的放大电路能够放大一定范围的交流信号 但前提是需
  • 中望软件笔试

    文章目录 前言 一 判断一点是否在三角形中 题目简介 一 面积 代码实现 二 向量 代码实现 二 求矩阵中的最小步数 题目简介 代码实现 总结 前言 简单记录一下笔试情况 一 判断一点是否在三角形中 题目简介 输入四个二维坐标 前三个点表示