2021/6/16华为OD机考试题

第一题

很简单的一道题,输入一个整型数组,找出其中出现次数超过一半以上的元素,输出该元素。

比如:

输入:

1,5,9,5,5,4,8,5,5

输出:

5

第二题

LeetCode 1319. 连通网络的操作次数

连通网络的最少操作次数,在leetcode上有原题。

第三题

有 n 个互不相同的坐标点 ,坐标值都为整数,存在 int[][] points 中,问由这些点可以组成多少个等腰直角三角形,其中最大的等腰直角三角形的面积是多少?

输入:第一行是一个整数 n,表示有 n 个点,接下来的 n 行数据表示 n 个 (x,y) 坐标点,x 和 y 之间用空格隔开。

3 
1 1
1 2
2 1

输出:第一个数字表示有多少个等腰直角三角形,第二个表示最大的等腰直角三角形面积(保留两位小数)。

1 0.50

这道题暴力循环就可以做出来,但是会有个坑,就是 double 类型的数字进行大小比较时,不能用 == ,比如 a==b 要写成 Math.abs(a-b)<0.1

我的代码实现:

import java.util.Scanner;

public class Main {
    /**
     * // 判断这三个点是否可以构成等腰直角三角形
     * @param x1
     * @param y1
     * @param x2
     * @param y2
     * @param x3
     * @param y3
     * @return 如果是等腰直角三角形,返回面积,如果不是,返回-1
     */
    public static double isRT(int x1,int y1, int x2, int y2,int x3, int y3){
        double a = getInstance(x1,y1,x2,y2);
        double b = getInstance(x1,y1,x3,y3);
        double c = getInstance(x2,y2,x3,y3);
        // a 作为底边
        if(a>b && a>c){
            if(Math.abs(c-b)<0.1 && Math.abs(Math.pow(b,2)+Math.pow(c,2)-Math.pow(a,2)) < 0.1) return c*b*0.5;
            return -1.0;
        }
        // b 作为底边
        if(b>a && b>c){
            if(Math.abs(c-a)<0.1 && Math.abs(Math.pow(a,2)+Math.pow(c,2)-Math.pow(b,2)) < 0.1) return c*a*0.5;
            return -1.0;
        }
        // c 作为底边
        if(c > a && c>b){
            if(Math.abs(a-b)<0.1 && Math.abs(Math.pow(a,2)+Math.pow(b,2)-Math.pow(c,2)) < 0.1) return a*b*0.5;
            return -1.0;
        }
        // 无法构成等腰直角三角形
        return -1.0;

    }

    // 两点之间的长度
    public static double getInstance(int x1,int y1, int x2,int y2){
        return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    }

    public static void main(String[] args) {
        // 输入数据
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] points = new int[n][2];
        for(int i=0; i<n; i++){
            points[i][0] = in.nextInt();
            points[i][1] = in.nextInt();
        }

        // 处理数据
        int count = 0;
        double maxS = 0.0;
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                for(int k=j+1; k<n; k++){
                    double s = isRT(points[i][0],points[i][1], points[j][0],points[j][1], points[k][0],points[k][1]);
                    if(s > 0.0){
                        count++;
                        maxS = Math.max(maxS,s);
                    }
                }
            }
        }

        // 输出数据
        System.out.print(count + " " + String.format("%.2f",maxS));
    }
}
#华为od##笔试题目##华为#
全部评论
血泪般的教训!!!机考时候,电脑只能打开本地IDE和考试一个页面,注意是一个页面!!!不能有其他页面!!!我就是浏览器除了考试页面,还有其他一堆乱七八糟的页面,被后台判作弊了!然后我跟负责招聘的小姐姐解释之后,现在要重新开始再考一次!希望我能继续保持好运气,碰到不难的题目吧
1 回复
分享
发布于 2021-06-17 10:35
请问,华为这个是21届校招么
点赞 回复
分享
发布于 2021-06-16 21:01
联想
校招火热招聘中
官网直投
是提前批吗?是不是同一时间考的题目是一样的?
点赞 回复
分享
发布于 2021-06-27 15:41

相关推荐

7 48 评论
分享
牛客网
牛客企业服务