华为od机试题9 真题
华为od机试题 真题
- 9.寻找重复字符
- 7.字符串翻转
- 6.小朋友身高排序
- 5.CPU最少执行时间
- 4.猴子爬山
- 3.输出信元的值
- 2.指定元素对最小和
- 1.勾股数元组
以下题目附带Java解法,是我个人写的,不一定是标准答案,没有真正的测试数据,只能说是我自己认为通过率100%,也不一定是最优解。如果有错误或是有更好的解法,请评论告诉我!!!
9.寻找重复字符
题目描述:
给定两个字符串,
从字符串2中找出字符串1中的所有字符,
去重并按照ASCII码值从小到大排列,输入描述
字符范围满足ASCII编码要求,
输入字符串1长度不超过1024,
字符串2长度不超过100输出描述
按照ASCII由小到大排序示例一
输入
bach
bbaaccddfg输出
abc示例二
输入
fach
bbaaccedfg输出
acf
// 寻找重复字符public static void test009() {Scanner scanner = new Scanner(System.in);String line1 = scanner.nextLine();String line2 = scanner.nextLine();List<Character> list = new ArrayList<>();// 将输入的字符串转为字符数组for (int i = 0; i < line2.length(); i++) {list.add(line2.charAt(i));}// 用来存第一第二次输入都有的字符List<Character> resList = new ArrayList<>();for (int i = 0; i < line1.length(); i++) {char c = line1.charAt(i);// &&后的条件是防止重复if (list.contains(c) && !resList.contains(c)) {resList.add(c);}}// 对集合进行排序,默认是按ASCII码值排序Collections.sort(resList);for (Character c : resList) {System.out.print(c);}}
7.字符串翻转
输入一个英文文章片段翻转指定区间的单词顺序,标点符号和普通字母一样处理例如输入字符串 "I am a developer."区间[0,3]则输出 "developer. a am I"输入描述:使用换行隔开三个参数第一个参数为英文文章内容即英文字符串第二个参数为反转起始单词下标,下标从0开始第三个参数为结束单词下标,输出描述反转后的英文文章片段,所有单词之间以一个半角空格分割进行输出示例一:输入I am a developer.12输出I a am developer.示例二:输入Hello world!01输出world! Hello说明:输入字符串可以在前面或者后面包含多余的空格,但是反转后的不能包含多余空格示例三:输入:I am a developer.03输出developer. a am I说明:如果两个单词见有多余的空格将反转后单词间的空格减少到只含一个示例四:输入Hello!03输出EMPTY说明:指定反转区间只有一个单词,或无有效单词则统一输出EMPTY
// 字符串翻转public static void test007() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int start = sc.nextInt();int end = sc.nextInt();// 去掉前后的空格line = line.trim();String[] split = line.split(" ");// 如果起始数小于0,取0start = Math.max(start, 0);// 如果结束数大于数组长度,取数组最后一个end = Math.min(end, split.length - 1);// 指定反转区间只有一个单词,或无有效单词则统一输出EMPTYif (start >= end || start >= split.length - 1 || end <= 0) {System.out.println("EMPTY");return;}// 进行字符串翻转,直至重合while (start < end){String temp = split[start];split[start] = split[end];split[end] = temp;start++;end--;}//拼接字符串StringBuilder sb = new StringBuilder();for (String s : split) {sb.append(s + " ");}// 去掉末尾的空格System.out.println(sb.toString().trim());}
6.小朋友身高排序
题目描述:小明今年升学到了小学一年级,来到新班级后,发现其他小朋友身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序输入描述第一行为正整数 H和N0 < H < 200 为小明的身高0 < H < 50 为新班级其他小朋友个数第二行为N个正整数H1 ~ Hn分别是其他小朋友的身高取值范围0 < Hi < 200且N个正整数各不相同输出描述输出排序结果,各正整数以空格分割和小明身高差绝对值最小的小朋友排在前面和小明身高差绝对值最大的小朋友排在后面如果两个小朋友和小明身高差一样则个子较小的小朋友排在前面示例一输入100 1095 96 97 98 99 101 102 103 104 105输出99 101 98 102 97 103 96 104 95 105
// 小朋友身高排序public static void test006() {Scanner sc = new Scanner(System.in);String line1 = sc.nextLine();String line2 = sc.nextLine();String[] input1 = line1.split(" ");String[] input2 = line2.split(" ");// 基准数int height = Integer.parseInt(input1[0]);// 人数int num = Integer.parseInt(input1[1]);List<Integer> list = new ArrayList<>();for (int i = 0; i < num; i++) {list.add(Integer.parseInt(input2[i]));}// list.sort() 自定义排序规则// 在 list.sort() 底层代码中,以 compare(list [ i - 1 ], list [ i ]) 形式调用该方法,// 当其的返回值大于0时,list [ i - 1 ] 将与 list [ i ] 交换位置list.sort((h1, h2) -> {// 与基准数的绝对值int diff1 = Math.abs(h1 - height);int diff2 = Math.abs(h2 - height);// 若与基准数的绝对值相等,则高的排在后,否则基准数大的排在后return diff1 == diff2 ? h1 - h2 : diff1 - diff2;});for (Integer h : list) {System.out.print(h + " ");}}
5.CPU最少执行时间
题目描述:为了充分发挥Gpu算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1s内新增的任务个数,且每秒都有新增任务,假设GPU最多一次执行n个任务,一次执行耗时1s,在保证Gpu不空闲的情况下,最少需要多长时间执行完成。输入描述第一个参数为gpu最多执行的任务个数取值范围1~10000第二个参数为任务数组的长度取值范围1~10000第三个参数为任务数组数字范围1~10000输出描述执行完所有任务需要多少秒示例一输入351 2 3 4 5输出6说明一次最多执行3个任务,最少耗时6s示例二输入455 4 1 1 1输出5说明一次最多执行4个任务,最少耗时5s
// CPU最少执行时间public static void test005() {Scanner sc = new Scanner(System.in);// 每秒执行任务数int qps = Integer.parseInt(sc.nextLine());int arrayLen = Integer.parseInt(sc.nextLine());String line = sc.nextLine();int[] array = new int[arrayLen];String[] strings = line.split(" ");for (int i = 0; i < arrayLen; i++) {array[i] = Integer.parseInt(strings[i]);}// 使用的时间int time = 0;// 剩余任务,初始为0int leaveTask = 0;for (int i = 0; i < arrayLen; i++) {// 若当前任务+剩余任务大于每秒执行任务,则剩余任务 = 之前剩余任务 + 当前任务 - 每秒执行任务if (array[i] + leaveTask > qps) {leaveTask = array[i] + leaveTask - qps;} else {leaveTask = 0;}// 累加时间time++;}// 当数组走完后还有剩余任务,用剩余任务/每秒执行任务算出需要的时间if (leaveTask > 0) {int res = leaveTask / qps;time = time + res;if (leaveTask % qps != 0) {time++;}}System.out.println(time);}
4.猴子爬山
题目描述:一天一只顽猴想要从山脚爬到山顶途中经过一个有n个台阶的阶梯,但是这个猴子有个习惯,每一次只跳1步或3步试问?猴子通过这个阶梯有多少种不同的跳跃方式输入描述输入只有一个这个数n 0 < n < 50此阶梯有多个台阶输出描述有多少种跳跃方式示例一输入50输出122106097示例二输入3COPY输出2
/*** 解题思路:* 动态规划题,找规律* n = 1 1* n = 2 1* n = 3 2* n = 4 3* n = 5 4* n = 6 6* n = 7 9* 可得当n > 3时 f(n) = f(n - 1) + f(n - 3)* 所以可以用递归,n = 1/2/3 时值是固定的,为递归结束条件*/// 猴子爬山public static void test004() {Scanner sc = new Scanner(System.in);int nums = sc.nextInt();int value = fun(nums);System.out.println(value);}private static int fun(int nums) {// 递归结束条件if (nums == 1 || nums == 2) {return 1;}// 递归结束条件if (nums == 3) {return 2;}// 规律return fun(nums - 1) + fun(nums - 3);}
3.输出信元的值
题目描述:TLV编码是按TagLengthValue格式进行编码的,一段码流中的信元用tag标识,tag在码流中唯一不重复,length表示信元value的长度,value表示信元的值,码流以某信元的tag开头,tag固定占一个字节,length固定占两个字节,字节序为小端序,现给定tlv格式编码的码流以及需要解码的信元tag,请输出该信元的value。输入码流的16进制字符中,不包括小写字母;且要求输出的16进制字符串中也不要包含小写字母;码流字符串的最大长度不超过50000个字节。输入描述第一行为第一个字符串 ,表示待解码信元的tag;输入第二行为一个字符串, 表示待解码的16进制码流;字节之间用空格分割。输出描述输出一个字符串,表示待解码信元以16进制表示的value。示例一输入3132 01 00 AE 90 02 00 01 02 30 03 00 AB 32 31 31 02 00 32 33 33 01 00 CC输出32 33说明需要解析的信源的tag是31;从码流的起始处开始匹配,tag为32的信元长度为1(01 00,小端序表示为1);第二个信元的tag为90 其长度为2;第三个信元的tag为30 其长度为3;第四个信元的tag为31 其长度为2(02 00);所以返回长度后面的两个字节即可 为 32 33。
// 输出信元的值public static void test003() {Scanner sc = new Scanner(System.in);String tag = sc.nextLine();String line = sc.nextLine();int len = line.length();int p = 0;while (p < len) {// value的长度 后两位拼接前两位,16进制,需要转换为10进制int length = Integer.parseInt(line.substring(p + 6, p + 8) + line.substring(p + 3, p + 5), 16);// 找到目标值if (tag.equals(line.substring(p, p + 2))) {String value = line.substring(p + 9, p + 9 + (length * 3 - 1));System.out.println(value);return;}// 动态算出p应该移动几位,tag和length是固定的,value根据length决定,要注意空格p += 9 + length * 3;}}
2.指定元素对最小和
题目描述:给定两个整数数组,arr1、arr2,数组元素按升序排列;假设从arr1、arr2中分别取出一个元素,可构成一对元素;现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值;注意:两对元素对应arr1、arr2的下标是相同的,视为同一对元素。输入描述输入两行数组arr1、arr2每行首个数字为数组大小size, 0 < size <= 100arr1,arr2中的每个元素e, 0< e <1000接下来一行,正整数k 0 < k <= arr1.size * arr2.size输出描述满足要求的最小值示例一输入1 1 21 2 32输出4说明:用例中需要取两个元素,取第一个数组第0个元素与第二个数组第0个元素组成一个元素[1,1];取第一个数组第1个元素与第二个数组第0个元素组成一个元素[1,1];求和为1+1+1+1=4 ,满足要求最小
// 指定元素对最小和// 思路:双层for循环,求出两个数组所有值一一相加的值,放进另一个数组中,并进行升序排序,求出指定前几个的和public static void test002() {Scanner sc = new Scanner(System.in);String line1 = sc.nextLine();String line2 = sc.nextLine();int[] array1 = stringToArray(line1);int[] array2 = stringToArray(line2);int len1 = array1.length;int len2 = array2.length;int groupCount = sc.nextInt();List<Integer> list = new ArrayList();// 双层for循环,求出两个数组所有值一一相加的值,放进另一个数组中for (int i = 0; i < len1; i++) {for (int j = 0; j < len2; j++) {list.add(array1[i] + array2[j]);}}// 对集合进行排序(升序)Collections.sort(list);int res = 0;// 求出指定前几个的和for (int i = 0; i < groupCount; i++) {res += list.get(i);}System.out.println(res);}private static int[] stringToArray(String line) {String[] strings = line.split(" ");int[] array = new int[strings.length];for (int i = 0; i < strings.length; i++) {array[i] = Integer.parseInt(strings[i]);}return array;}
1.勾股数元组
题目描述:如果三个正整数A、B、C ,A²+B²=C²则为勾股数如果ABC之间两两互质,即A与B,A与C,B与C均互质没有公约数,则称其为勾股数元组。请求出给定n~m范围内所有的勾股数元组输入描述起始范围1 < n < 10000n < m < 10000输出描述ABC保证A<B<C输出格式A B C多组勾股数元组,按照A B C升序的排序方式输出。若给定范围内,找不到勾股数元组时,输出Na。示例一输入120输出3 4 55 12 138 15 17示例二输入510输出Na
// 解题思路:双层for循环,求出所有勾股数元组,在筛选出符合条件的// 勾股数元组public static void test001() {Scanner sc = new Scanner(System.in);int num1 = sc.nextInt();int num2 = sc.nextInt();boolean flag = true;for (int i = num1; i < num2; i++) {for (int j = i + 1; j <= num2; j++) {// pow():取几次方,0.5次方相当于开根号double res = Math.pow(i, 2) + Math.pow(j, 2);double pow = Math.pow(res, 0.5);// 结果小于nums且是整数 判断一个double型数据是不是整数:Math.abs(pow - Math.round(pow)) < Double.MIN_VALUEif (pow <= num2 && Math.abs(pow - Math.round(pow)) < Double.MIN_VALUE) {int powRes = (int) pow;// 两两互质if (isSingle(i, j) && isSingle(i, powRes) && isSingle(j, powRes)) {System.out.println(i + " " + j + " " + powRes);flag = false;}}}}if (flag) {System.out.println("Na");}}/*** 判断两个数字是否互质 (没有相同的公约数)** @param num1* @param num2* @return*/private static boolean isSingle(int num1, int num2) {int res = Math.min(num1, num2);for (int i = 2; i <= res; i++) {if (num1 % i == 0 && num2 % i == 0) {return false;}}return true;}
华为od机试题9 真题相关推荐
- 华为od机试题4 真题
华为od机试题 真题 58.处理所有作业总时长 53.最大停车距离 52.磁盘容量排序 51.非严格递增连续数字序列长度 50.均分糖果 48.没有相同字符的元素长度乘积的最大值 47. 相对开音节结 ...
- 华为od机试题1 真题
华为od机试题 真题 86.射击比赛成绩排序 85.计算屏幕字母数量 84.组成最大数字 82.输出字符串中最小数字 81.数字4的个数 80.整数排列 79.多条件排列 78.时间排序 以下题目附带 ...
- 华为od机试题6 真题
华为od机试题 真题 35.输出满足条件的数对 34.寻找众数中的中位数 33.分配内存 32.窗口和的最大值 31.求整数的连续自然数之和的表达式 30.矩阵的最大值 以下题目附带Java解法,是我 ...
- 华为od机试题8 真题
华为od机试题 真题 10.输出最多类型的个数 11.树根节点到最小的叶子节点的路径 12.货车最大载货量 13.太阳能板最大面积 14.单词接龙 17.输出连续出现次数第k多的字母的次数 18.喊7 ...
- 华为od机试题2 真题
华为od机试题 真题 77.满足最大消费额度 76.小朋友身高位置 75.字符连续出现最大次数 74.最少停车数 73.字母多条件排序 71. 交叉排序 70.水仙花数 69.消除相邻且相同字母 以下 ...
- 【java华为机试】华为od机试题考试真题
前言综述: 本次od机试考试一共三道题,第一道题和第二道题各100分,第三道题200分.本次考试的答案都是2.5h考试的时候写的,代码写的也许并不好.在考试中还是蛮紧张的,所以写代码的时候注重的是完成 ...
- 华为OD机试-2023真题-考点分类
[华为OD机试]真题列表 2023Q1 !! 点这里!! [华为OD机试]2023机考真题 !! 点这里!! 从2022年11月以后,OD机试换了新题库,也就是本专栏的所有题目,新题库考察的算法比较 ...
- 【华为OD机试/笔试真题 python】出错的或电路
题目描述 [出错的或电路] 某生产门电路的厂商发现某一批次的或门电路不稳定,具体现象为计算两个二进制数的或操作时,第一个二进制数中某两个比特位会出现交换, 交换的比特位置是随机的,但只交换这两个位,其 ...
- 华为OD机试题(AB卷)真题抽中记录文档(更新到 6 月 21 日)
文章目录 本篇博客的价值 华为 OD 机试题 ⭐ ⭐ 华为 OD 机试 6 月 20 日 抽中卷 第一套 OD 机试卷 华为 OD 机试 6 月 19 日 抽中卷 第一套 OD 机试卷 华为 OD 机 ...
最新文章
- 基于图割优化的多平面重建视觉 SLAM(ISMAR2021)
- 2019河北高职计算机专科学校录取分数线,2019河北高考专科院校录取分数线_专科各院校投档线_一品高考网...
- 怎么把字符串变成数组_字符串哈希:从零开始的十分钟包会教程
- 同方专转本计算机视频,同方2011专转本计算机
- latex 算法_GitHub项目awesome-latex-drawing新增内容(四):绘制贝叶斯网络
- 微信又上线了新功能,聊天再也不会发错群了?
- LINQ学习之旅——再次拾起
- Apache Rewrite 理解
- learning opencv3: 九:鼠标操作
- 数组操作--微信小程序学习教程 1
- 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
- android获取wifi支持的信道,Android获取当前连接wifi的信道
- dhcp服务器自动分配dns,一文了解如何使用DHCP自动分配IP地址?
- b站pink老师JavaScript的PC端网页特效 案例代码——引用animate.js案例
- 不是python文件操作的相关函数_从零开始学Python(七):文件存储I/O流和异常捕捉
- Faster Read: Deep High Dynamic Range Imaging with Large Foreground Motions
- com.google.zxing jar下载
- 服务器信息怎么备份,DNS服务器信息备份与还原教程
- 什么是框架?常用框架有哪些?
- 支付宝当面付实现跳转到指定网页唤起支付