当前位置:   article > 正文

2022.06.26 华为od机试真题_od真题

od真题

1.最长连续子串

 有N个正整数组成的一个序列
 给定一个整数sum
 求长度最长的的连续子序列使他们的和等于sum
 返回次子序列的长度
 如果没有满足要求的序列 返回-1
 案例1:
 输入
 1,2,3,4,2
 6
 输出
 3
 解析:1,2,3和4,2两个序列均能满足要求
 所以最长的连续序列为1,2,3 因此结果为3

 示例2:
 输入
 1,2,3,4,2
 20
 输出
 -1
 解释:没有满足要求的子序列,返回-1

 备注: 输入序列仅由数字和英文逗号构成
 数字之间采用英文逗号分割
 序列长度   1<=N<=200
 输入序列不考虑异常情况
 由题目保证输入序列满足要求
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author CZM
 * @date 2022 06 26 20:12
 */
// 最长连续子串
public class test02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        int num = Integer.parseInt(sc.nextLine());
        String[] split = line.split(",");
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < split.length; i++){
            list.add(Integer.parseInt(split[i]));
        }
        int count = -1;
        for (int i = 0; i < list.size(); i++){
            if (list.get(i) == num) {
                count = Math.max(1,count);
            } else if (list.get(i) < num) {
                int sum = 0;
                int start = i;
                while (start < list.size()){
                    sum += list.get(start);
                    if (sum == num) {
                        count = Math.max(count, start+1-i);
                        break;
                    } else if (sum > num){
                        break;
                    } else {
                        start++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
 题目描述
 输入N个互不相同的二维整数坐标,求这N个坐标可以构成的正方形数量。[内积为零的的两个向量垂直]
 输入描述
 第一行输入为N,N代表坐标数量,N为正整数。N <= 100
 之后的 K 行输入为坐标x y以空格分隔,x,y为整数,-10<=x, y<=10
 输出描述
 输出可以构成的正方形数量。

 示例 1
 输入
 3
 1 3
 2 4
 3 1
 输出
 0 (3个点不足以构成正方形)
 
 示例 2 
 输入
 4
 0 0
 1 2
 3 1
 2 -1
 输出
 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

2.正方形数量


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author CZM
 * @date 2022 06 26 20:12
 */
// 正方形数量
public class test03 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = Integer.parseInt(sc.nextLine());
        List<String> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            list.add(sc.nextLine());
        }
        int count = 0;
        if (num <= 3) {
            System.out.println(count);
            return;
        }
        for (int i = 0; i<list.size(); i++) {
            String str = list.get(i);
            String[] split = str.split(" ");
            int x1 = Integer.parseInt(split[0]);
            int y1 = Integer.parseInt(split[1]);
            for (int j = i + 1; j<list.size(); j++) {
                String str1 = list.get(j);
                String[] split1 = str1.split(" ");
                int x2 = Integer.parseInt(split1[0]);
                int y2 = Integer.parseInt(split1[1]);

                int x31 = x1 - (y1-y2);
                int y31 = y1 + (x1-x2);
                int x41 = x2 - (y1-y2);
                int y41 = y2 + (x1-x2);

                int x32 = x1 + (y1-y2);
                int y32 = y1 - (x1-x2);
                int x42 = x2 + (y1-y2);
                int y42 = y2 - (x1-x2);

                if (list.contains(x31 + " " + y31) && list.contains(x41 + " " + y41)) {
                    count++;
                }
                if (list.contains(x32 + " " + y32) && list.contains(x42 + " " + y42)) {
                    count++;
                }
            }
        }
        System.out.println(count / 4);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

3.二叉树层次遍历(不会做)

 题目描述
 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。
 现有两组字母,分别表示后序遍历(父节点->左孩子->右孩子)
 和中序遍历(左孩子->父节点->右孩子)的结果,
 请你输出层次遍历(左孩子->右孩子->父节点)的结果
 
 输入描述
 输入1行,分别表示后序遍历(父节点->左孩子->右孩子)和中序遍历(左孩子->父节点->右孩子)的结果。
 
 输出描述
 输出层次遍历(左孩子->右孩子->父节点)的结果。

 示例 
 输入
 CBEFDA CBAEDF

 输出
 ABDCEF
 说明:(如下图)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/152741
推荐阅读
相关标签
  

闽ICP备14008679号