华为od机试题8 真题
华为od机试题 真题
- 10.输出最多类型的个数
- 11.树根节点到最小的叶子节点的路径
- 12.货车最大载货量
- 13.太阳能板最大面积
- 14.单词接龙
- 17.输出连续出现次数第k多的字母的次数
- 18.喊7
- 19.删除出现次数最少的字符
以下题目附带Java解法,是我个人写的,不一定是标准答案,没有真正的测试数据,只能说是我自己认为通过率100%,也不一定是最优解。如果有错误或是有更好的解法,请评论告诉我!!!
10.输出最多类型的个数
题目描述:对一个数据a进行分类,分类方法是,此数据a(4个字节大小)的4个字节相加对一个给定值b取模,如果得到的结果小于一个给定的值c则数据a为有效类型,其类型为取模的值。如果得到的结果大于或者等于c则数据a为无效类型。比如一个数据a=0x01010101,b=3按照分类方法计算:(0x01+0x01+0x01+0x01)%3=1所以如果c等于2,则此a就是有效类型,其类型为1如果c等于1,则此a是无效类型又比如一个数据a=0x01010103,b=3按分类方法计算:(0x01+0x01+0x01+0x03)%3=0所以如果c=2则此a就是有效类型 其类型为0如果c等于0 则此a是无效类型输入12个数据,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据输入描述输入12个数据用空格分割,第一个数据为c,第二个数据为b,剩余10个数据为需要分类的数据。输出描述请找到有效类型中包含数据最多的类型,并输出该类型含有多少个数据。示例一输入3 4 256 257 258 259 260 261 262 263 264 265输出3说明这10个数据4个字节相加后的结果分别是1 2 3 4 5 6 7 8 9 10故对4取模的结果为1 2 3 0 1 2 3 0 1 2c是3所以012都是有效类型类型为1和2的有3个数据类型为0和3的只有两个示例二输入1 4 256 257 258 259 260 261 262 263 264 265输出2
// ps:这道题我的理解是把输入的转为16进制,从后往前取依次取2位,如果16进制数长度大于8,取后8位,然后转为10进制相加,与基数取模。它的案列给得不清楚,不确定题目是不是这个意思。// 输出最多类型的个数public static void test010() {Scanner sc = new Scanner(System.in);List<Integer> list = new ArrayList<>();String s = sc.nextLine();String[] strings = s.split(" ");// 转为int型集合for (int i = 0; i < strings.length; i++) {list.add(Integer.parseInt(strings[i]));}// map用来存储出现次数,key为取模后的值,value为次数HashMap<Integer, Integer> map = new HashMap<>();for (int i = 2; i < list.size(); i++) {// 将输入的数转为16进制String num16 = tenTo16(list.get(i));int len = num16.length();// 累加的和int allRes = 0;// 从后往前取依次取2位,如果16进制数长度大于8,取后8位,然后转为10进制相加if (len >= 8) {// 16进制转10进制:Integer.parseInt("ABCD", 16);allRes = Integer.parseInt(num16.substring(len - 8, len - 6), 16) + Integer.parseInt(num16.substring(len - 6, len - 4), 16)+ Integer.parseInt(num16.substring(len - 4, len - 2), 16) + Integer.parseInt(num16.substring(len - 2, len), 16);} else if (len == 7) {allRes = Integer.parseInt(num16.substring(0, 1), 16) + Integer.parseInt(num16.substring(1, 3), 16)+ Integer.parseInt(num16.substring(3, 5), 16) + Integer.parseInt(num16.substring(5, 7), 16);} else if (len == 6) {allRes = Integer.parseInt(num16.substring(0, 2), 16) + Integer.parseInt(num16.substring(2, 4), 16)+ Integer.parseInt(num16.substring(4, 6), 16);} else if (len == 5) {allRes = Integer.parseInt(num16.substring(0, 1), 16) + Integer.parseInt(num16.substring(1, 3), 16)+ Integer.parseInt(num16.substring(3, 5), 16);} else if (len == 4) {allRes = Integer.parseInt(num16.substring(0, 2), 16) + Integer.parseInt(num16.substring(2, 4), 16);} else if (len == 3) {allRes = Integer.parseInt(num16.substring(0, 1), 16) + Integer.parseInt(num16.substring(1, 3), 16);} else if (len == 2) {allRes = Integer.parseInt(num16.substring(0, 2), 16);} else if (len == 1) {allRes = Integer.parseInt(num16.substring(0, 1), 16);}System.out.println(allRes);int modeValue = allRes % list.get(1);System.out.println(modeValue);// 用map存次数if (modeValue < list.get(0)) {if (map.containsKey(modeValue)) {map.put(modeValue, map.get(modeValue) + 1);} else {map.put(modeValue, 1);}}}int maxCount = 0;// 找出最大的次数for (Integer key : map.keySet()) {maxCount = Math.max(map.get(key), maxCount);}System.out.println(maxCount);}/*** 十进制转十六进制** @return*/private static String tenTo16(int num) {String s = "";do {int res = num % 16;num = num / 16;if (res == 15) {s = "F" + s;} else if (res == 14) {s = "E" + s;} else if (res == 13) {s = "D" + s;} else if (res == 12) {s = "C" + s;} else if (res == 11) {s = "B" + s;} else if (res == 10) {s = "A" + s;} else {s = res + s;}} while (num != 0);return s;}
11.树根节点到最小的叶子节点的路径
题目描述:二叉树也可以用数组来存储,给定一个数组,树的根节点的值储存在下标1,对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2*n和2*n+1,并且我们用-1代表一个节点为空,给定一个数组存储的二叉树,试求从根节点到最小的叶子节点的路径,路径由节点的值组成。输入描述输入一行为数组的内容,数组的每个元素都是正整数,元素间用空格分割,注意第一个元素即为根节点的值,即数组的第n元素对应下标n,下标0在树的表示中没有使用,所以我们省略了,输入的树最多为7层。输出描述输出从根节点到最小叶子节点的路径上各个节点的值,由空格分割,用例保证最小叶子节点只有一个。示例一输入3 5 7 -1 -1 2 4输出3 7 2示例二输入5 9 8 -1 -1 7 -1 -1 -1 -1 -1 6输出5 8 7 6
// 解题思路:找出除了根节点的最小节点,除以2得到的整数就是它的父节点,依次除下去,直至根节点// 树根节点到最小的叶子节点的路径public static void test011(){Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] s = line.split(" ");// 只输入一个根元素,直接返回if(s.length <= 1) {System.out.println(s[0]);return;}List<Integer> list = new ArrayList<>();// 集合第一个元素是无关元素,存个最大的整型数list.add(Integer.MAX_VALUE);for (int i = 0;i<s.length;i++) {list.add(Integer.parseInt(s[i]));}// 找出最小的数,-1表示该节点为空,不参与查找int res = Integer.MAX_VALUE;for (int i = 2;i<list.size();i++) {if (list.get(i) != -1) {res = Math.min(res, list.get(i));}}// 找不到最小的数,说明树除了根元素,其他都是-1if (res == Integer.MAX_VALUE) {System.out.println(s[0]);return;}// 找出最小的数所在位置int resKey = 0;for (int i = 2;i<list.size();i++) {if (list.get(i) == res) {resKey = i;}}// 用于储存结果List<Integer> resList = new ArrayList<>();while (resKey != 1) {resList.add(resKey);resKey = resKey / 2;}// 添加根元素resList.add(1);for (int i = resList.size() - 1; i >= 0;i--) {System.out.print(list.get(resList.get(i)) + " ");}}
12.货车最大载货量
题目描述: 一辆运送快递的货车,运送的快递放在大小不等的长方体快递盒中,为了能够装载更多的快递同时不能让货车超载,需要计算最多能装多少个快递。注:快递的体积不受限制。快递数最多1000个,货车载重最大50000。输入描述第一行输入每个快递的重量用英文逗号隔开如 5,10,2,11第二行输入货车的载重量如 20输出描述输出最多能装多少个快递如 3示例一输入5,10,2,1120输出3
// 货车最大载货量public static void test012() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int capacity = sc.nextInt();String[] split = line.split(",");// 将字符串数组转为Integer型集合List<Integer> list = new ArrayList<>();for (int i = 0; i < split.length; i++) {list.add(Integer.parseInt(split[i]));}// 对集合进行排序Collections.sort(list);int sum = 0;for (int i = 0; i < list.size(); i++) {if (sum + list.get(i) < capacity) {sum = sum + list.get(i);} else {System.out.println(i);return;}}}
13.太阳能板最大面积
题目描述:给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域);需要先安装两个支柱(图中的黑色竖条);再在支柱的中间部分固定太阳能板;但航天器不同位置的支柱长度不同;太阳能板的安装面积受限于最短一侧的那支支柱的长度;现提供一组整型数组的支柱高度数据;假设每个支柱间的距离相等为一个单位长度;计算如何选择两根支柱可以使太阳能板的面积最大;输入描述10,9,8,7,6,5,4,3,2,1注释,支柱至少有两根,最多10000根,能支持的高度范围1~10^9的整数柱子的高度是无序的例子中的递减是巧合输出描述可以支持的最大太阳板面积:(10m高支柱和5m高支柱之间)25示例一输入10,9,8,7,6,5,4,3,2,1输出25备注10米高支柱和5米高支柱之间宽度为5,高度取小的支柱高度也是5,面积为25任取其他两根支柱所能获得的面积都小于25 所以最大面积为25
// 没图 题目大概的意思就是:数组两个元素的间距 乘以 两个元素中的最小值,取最大的,就是太阳能板的最大面积了// 太阳能板最大面积public static void test013() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] split = line.split(",");int len = split.length;// 结果int res = 0;for (int i = 0; i < len - 1; i++) {for (int j = i + 1; j < len; j++) {int eare = Math.min(Integer.parseInt(split[i]), Integer.parseInt(split[j])) * (j - i);res = Math.max(res, eare);}}System.out.println(res);}
14.单词接龙
题目描述:单词接龙的规则是:可用于接龙的单词,首字母必须要与前一个单词的尾字母相同;当存在多个首字母相同的单词时,取长度最长的单词;如果长度也相等,则取字典序最小的单词;已经参与接龙的单词不能重复使用;现给定一组全部由小写字母组成的单词数组,并指定其中一个单词为起始单词,进行单词接龙,请输出最长的单词串。单词串是单词拼接而成的,中间没有空格。单词个数 1 < N < 20单个单词的长度 1 ~ 30输入描述输入第一行为一个非负整数表示起始单词在数组中的索引k0 <= k < N输入的第二行为非负整数N接下来的N行分别表示单词数组中的单词输出描述输出一个字符串表示最终拼接的单词串示例一输入06worddddadcdwordd输出worddwordda示例二输入46worddddadcdwordd输出dwordda
// PS:如果给出的单词中同样的单词出现两次,能用两次还是用一次?我这里是用了两次,如果只能用一次的话,可以用一个list来存储用过的单词,如果在里面,就不用// 单词接龙public static void test055_2() {Scanner sc = new Scanner(System.in);int start = Integer.parseInt(sc.nextLine());int len = Integer.parseInt(sc.nextLine());List<String> list = new ArrayList<>();for (int i = 0; i < len; i++) {list.add(sc.nextLine());}String startWord = list.get(start);// 移除起始元素list.remove(startWord);list.sort((s1, s2) -> {int length1 = s1.length();int length2 = s2.length();if (length1 != length2) {return length2 - length1;}// 按照字典排序,遍历每一个字符,返回不相同字符的差值return s1.compareTo(s2);});String result = startWord;for (int i = 0; i < list.size(); i++) {String value = list.get(i);if (getStartOrEnd(startWord, 100).equals(getStartOrEnd(value, 1))) {result = result + value;// 找到的单词作为起始单词startWord = value;// 移除用过的单词list.remove(value);// 找到了归零,下一个从头开始找i = 0;}}System.out.println(result);}private static String getStartOrEnd(String key, int num) {// 求字符串首字母if (num == 1) {return key.substring(0, 1);} else { // 求字符串尾字幕return key.substring(key.length() - 1, key.length());}}
17.输出连续出现次数第k多的字母的次数
给定一个字符串只包含大写字母求在包含同一字母的子串中长度第K长的子串相同字母只取最长的子串输入第一行 一个子串 1<len<=100只包含大写字母第二行为k的值输出输出连续出现次数第k多的字母的次数例子:输入AABAAA2输出1同一字母连续出现最多的A 3次第二多2次 但A出现连续3次输入AAAAHHHBBCDHHHH3输出2//如果子串中只包含同一字母的子串数小于k则输出-1
// 输出连续出现次数第k多的字母的次数public static void test17() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();int num = sc.nextInt();char[] chars = line.toCharArray();Map<Character, Integer> map = new HashMap<>();int count = 1;for (int i = 0; i < chars.length; i++) {char c = chars[i];while (i + 1 < chars.length && c == chars[i + 1]) {count++;i++;}if (map.containsKey(c)) {if (count > map.get(c)) {map.put(c, count);}} else {map.put(c, count);}count = 1;}if (map.size() < num) {System.out.println(-1);return;}Object[] array = map.values().toArray();Arrays.sort(array, (a1, a2)->{return (Integer)a2 - (Integer) a1;});System.out.println(array[num - 1]);}
18.喊7
喊7 是一个传统的聚会游戏N个人围成一圈按顺时针从1-7编号编号为1的人从1开始喊数下一个人喊得数字是上一个人喊得数字+1但是当将要喊出数字7的倍数或者含有7的话不能喊出 而是要喊过假定N个人都没有失误。当喊道数字k时可以统计每个人喊 “过"的次数现给定一个长度n的数组存储打乱的每个人喊”过"的次数请把它还原成正确顺序即数组的第i个元素存储编号i的人喊“过“的次数输入为1行空格分割的喊过的次数注意k并不提供k不超过200数字个数为n输出描述输出为1行顺序正确的喊过的次数 空格分割例子输入0 1 0输出1 0 0只有一次过发生在7按顺序编号1的人遇到7 所以100结束时的k不一定是7 也可以是 8 9喊过都是100例子输入0 0 0 2 1输出0 2 0 1 0一共三次喊过发生在7 14 17编号为2 的遇到7 17编号为4 的遇到14
// 喊7public static void test18(){Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] split = line.split(" ");int length = split.length;int res = 0;for (int i = 0; i < length; i++) {res += Integer.parseInt(split[i]);}List<Integer> list = new ArrayList<>();// 求出所有含7以及7的倍数 (k不超过200)for (int i = 1; i < 200; i++) {String s = i+"";if (s.contains("7") || i % 7 == 0) {list.add(i);}}int[] array = new int[length];for (int i = 0; i < res; i++) {array[(list.get(i) % length) - 1] += 1;}for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}
19.删除出现次数最少的字符
删除字符串中出现次数最少的字符
如果多个字符出现次数一样则都删除例子:
输入abcdd字符串中只输出dd输入aabbccdd输出empty如果都被删除 则换为empty
//删除出现次数最少的字符public static void test19(){Scanner sc = new Scanner(System.in);String line = sc.nextLine();if (line.length() <= 1) {System.out.println("empty");return;}char[] chars = line.toCharArray();Map<Character, Integer> map = new HashMap<>();for (int i = 0; i < chars.length; i++) {char c = chars[i];if (map.containsKey(c)){map.put(c, map.get(c) + 1);}else {map.put(c, 1);}}Integer[] array = new Integer[map.size()];Integer[] array1 = map.values().toArray(array);Arrays.sort(array1);int minLen = array1[0];for (Character s : map.keySet()) {if (map.get(s) == minLen) {line = line.replace(s + "", "");}}if (line.length() <= 0) {System.out.println("empty");} else {System.out.println(line);}}
更多华为od机试题请点这里<华为od机试题9 真题>,每篇8题,有更多的题也请告诉我啊
华为od机试题8 真题相关推荐
- 华为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机试题2 真题
华为od机试题 真题 77.满足最大消费额度 76.小朋友身高位置 75.字符连续出现最大次数 74.最少停车数 73.字母多条件排序 71. 交叉排序 70.水仙花数 69.消除相邻且相同字母 以下 ...
- 华为od机试题9 真题
华为od机试题 真题 9.寻找重复字符 7.字符串翻转 6.小朋友身高排序 5.CPU最少执行时间 4.猴子爬山 3.输出信元的值 2.指定元素对最小和 1.勾股数元组 以下题目附带Java解法,是我 ...
- 【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 机 ...
最新文章
- python之lxml处理xml
- android byteBuffer的使用
- 给用户权限数据添加缓存
- python科学计算笔记(十)pandas中时间、日期以及时间序列处理
- 使用正则表达式的技巧
- define特殊用法
- Linux内核内存管理(3):kmemcheck介绍
- python处理websocket
- 腾讯云TDSQL-C云原生数据库技术
- java拼图_java拼图
- 佳能 MG3080 打印机换墨盒
- halcon 二值图像处理 区域的细化 skeleton
- 关于地方美食的HTML网页设计——地方美食介绍网站 HTML顺德美食介绍 html网页制作代码大全
- Nginx更新文件后不生效
- calendar获取本周一的日期_Swift - 获取本周(或指定日期所在周)的第一天、最后一天日期...
- Linux:黑客传说
- matlab怎么增加图例,matlab中legend函数在添加图例时的使用方法 - matlab资源网
- Windows 7下的Aero效果
- 视频直播软件开发关于亚马逊s3接入方式,视频直播源码创建存储桶方法
- 移动考勤满足企业实时管理
热门文章
- Python学习记录-项目案例实现:爬虫篇 03
- “神奇”的拉马努金矩阵
- mini-batch_Spring Batch教程– ULTIMATE指南
- java创建mysql sche_爱可生详解MySQL|入门必看DBLE中间件使用指南第一章:初识DBLE...
- 兴旺小企业财务软件 v2.0 官方
- 基于springboot+vue+element-ui开发的大型智慧校园电子班牌系统源码
- python打包文件
- 光栅位移传感器如何安装
- android ui fundamentals pdf,Android UI Fundamentals
- java+vue下载xls文件到本地