华为od机试题2 真题
华为od机试题 真题
- 77.满足最大消费额度
- 76.小朋友身高位置
- 75.字符连续出现最大次数
- 74.最少停车数
- 73.字母多条件排序
- 71. 交叉排序
- 70.水仙花数
- 69.消除相邻且相同字母
以下题目附带Java解法,是我个人写的,不一定是标准答案,没有真正的测试数据,只能说是我自己认为通过率100%,也不一定是最优解。如果有错误或是有更好的解法,请评论告诉我!!!
77.满足最大消费额度
双十一众多商品进行打折销售小明想购买自己心仪的一些物品但由于购买资金限制所以他决定从众多心仪商品中购买三件而且想尽可能得花完资金现在请你设计一个程序 计算小明尽可能花费的最大资金数输入描述:
输入第一行为一维整型数组m
数组长度小于100
数组元素记录单个商品的价格
单个商品加个小于1000输入第二行为购买资金的额度r
r<100000输出描述:输出为满足上述条件的最大花费额度注意:如果不存在满足上述条件的商品请返回-1示例:输入23,26,36,2778输出76说明:金额23、26、27得到76而且最接近且小于输入金额78示例:输入23,30,4026输出-1说明因为输入的商品无法满足3件之和小于26故返回-1输入格式正确无需考虑输入错误情况4
// 满足最大消费额度public static void test077() {Scanner sc = new Scanner(System.in);String line1 = sc.nextLine();String line2 = sc.nextLine();String[] split = line1.split(",");int len = split.length;int sum = 0;// 依次遍历,列出所有的三数之和for (int i = 0; i < len - 2; i++) {for (int j = i + 1; j < len - 1; j++) {for (int k = j + 1; k < len; k++) {int res = Integer.parseInt(split[i]) + Integer.parseInt(split[j]) + Integer.parseInt(split[k]);if (res < Integer.parseInt(line2)) {// 与原来的值比较,留下大的值sum = Math.max(sum, res);}}}}if (sum == 0) {System.out.println(-1);} else {System.out.println(sum);}}
76.小朋友身高位置
在学校中N个小朋友站成一队第i个小朋友的身高为height[i]第i个小朋友可以看到第一个比自己身高更高的小朋友j那么j是i的好朋友(要求:j>i)请重新生成一个列表对应位置的输出是每个小朋友的好朋友的位置如果没有看到好朋友请在该位置用0代替小朋友人数范围 0~40000输入描述:
第一行输入N
N表示有N个小朋友第二行输入N个小朋友的身高height[i]
都是整数输出描述:
输出N个小朋友的好朋友的位置示例1:输入:2100 95输出0 0说明第一个小朋友身高100站在队伍末尾向队首看 没有比他身高高的小朋友所以输出第一个值为0第二个小朋友站在队首前面也没有比他身高高的小朋友所以输出第二个值为0示例2:输入8123 124 125 121 119 122 126 123输出1 2 6 5 5 6 0 0说明:123的好朋友是1位置上的124124的好朋友是2位置上的125125的好朋友是6位置上的126依此类推
// 小朋友身高位置public static void test076() {Scanner sc = new Scanner(System.in);// 数组长度int len = Integer.parseInt(sc.nextLine());String line = sc.nextLine();String[] split = line.split(" ");// 双层循环,依次往后比较for (int i = 0; i < len - 1; i++) {for (int j = i + 1; j < len; j++) {if (Integer.parseInt(split[i]) < Integer.parseInt(split[j])) {System.out.print(j + " ");break;}// 当看到最后一个,还没结束,说明没有,输出0if (j == len - 1) {System.out.print(0 + " ");}}}// 队首直接输出0System.out.print(0);}
75.字符连续出现最大次数
输入一串字符串字符串长度不超过100查找字符串中相同字符连续出现的最大次数输入描述输入只有一行,包含一个长度不超过100的字符串输出描述输出只有一行,输出相同字符串连续出现的最大次数说明:输出示例1:输入hello输出2示例2:输入word输出1示例3:输入aaabbc输出3字符串区分大小写
// 字符连续出现最大次数public static void test075() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] split = line.split("");// 出现次数,初始值为1int sum = 1;// 最大次数int res = 0;for (int i = 0; i < split.length; i++) {// 连续相同字符串while (i + 1 < split.length && split[i].equals(split[i + 1])) {sum++;i++;}// 比较出最大的res = Math.max(res, sum);// 初始化出现次数sum = 1;}System.out.println(res);}
74.最少停车数
特定大小的停车场 数组cars表示
其中1表示有车 0表示没车
车辆大小不一,小车占一个车位(长度1)
货车占两个车位(长度2)
卡车占三个车位(长度3)
统计停车场最少可以停多少辆车
返回具体的数目输入描述:整型字符串数组cars其中1表示有车0表示没车数组长度<1000输出描述:整型数字字符串表示最少停车数示例1:输入1,0,1输出2说明:一个小车占第一个车位第二个车位空,一个小车占第三个车位最少有两辆车示例2:输入:1,1,0,0,1,1,1,0,1输出:3说明:一个货车占第1,2个车位第3,4个车位空一个卡车占第5,6,7个车位第8个车位空一个小车占第9个车位最少3俩个车
// 最少停车数public static void test074() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();String[] split = line.split(",");// 连续1的次数int count = 0;// 找出所有的连续1的次数,存在list中List<Integer> list = new ArrayList<>();for (int i = 0; i < split.length; i++) {// 找出连续1的次数while (i < split.length && "1".equals(split[i])) {count++;i++;}// 连续1的次数大于0,存入list中if (count != 0) {list.add(count);}// 初始化count = 0;}int res = 0;for (int i = 0; i < list.size(); i++) {// 累加结果,算出能停几辆卡车res += list.get(i) / 3;// 如果%3有剩余的,则再加一辆,不用管余1还是余2,最小都是一辆if (list.get(i) % 3 != 0) {res++;}}System.out.println(res);}
73.字母多条件排序
给出一个只包含字母的字符串,
不包含空格,统计字符串中各个子字母(区分大小写)出现的次数,
并按照字母出现次数从大到小的顺序输出各个字母及其出现次数
如果次数相同,按照自然顺序排序,且小写字母在大写字母之前输入描述:输入一行仅包含字母的字符串输出描述:按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分割,注意末尾的分号字母和次数中间用英文冒号分隔示例:输入: xyxyXX输出:x:2;y:2;X:2;
说明:每个字符出现的次数为2 故x排在y之前
而小写字母x在大写X之前示例2:输入:abababb输出:b:4;a:3说明:b的出现个数比a多 故排在a前
// PS:这道题按我的理解我做的是对的,先按次数排序,排完在按a~z A~Z排序。但是案例给的不清楚,或许可以 a~z中按次数排序,后在A~Z中按次数排序,就是小写在前,大写在后// 字母多条件排序public static void test073() {Scanner sc = new Scanner(System.in);char[] chars = sc.nextLine().toCharArray();// 用一个map,key存字符,value存字符出现次数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);}}// 小写字符的ACSII码大于大写字符, a~z 递增 A~Z递增 Set<Map.Entry<Character, Integer>> entries = map.entrySet();// 排序 排序规则:当返回的数字大于0,则进行换位置,否则不换entries.stream().sorted((s1, s2) -> {// 按次数排序if (s1.getValue() - s2.getValue() != 0) {return s2.getValue() - s1.getValue();}Character key1 = s1.getKey();Character key2 = s2.getKey();// a~z 两个小写字母之间的比较if (key1.compareTo('A') > 25 && key2.compareTo('A') > 25) {return key1 - key2; // 字符a~z A~Z之间加减返回数字}// A~Z 两个大写字母之间的比较if (key1.compareTo('A') < 26 && key2.compareTo('A') < 26) {return key1 - key2;}// a~z 混 A~Z 大小写字母之间的比较,大写在后return -(key1 - key2);}).forEach((s) -> {System.out.print(s.getKey() + ":" + s.getValue() + ";");});}
71. 交叉排序
现在有一队小朋友,他们高矮不同,
我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。
我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,
每一个“高”位置的小朋友要比相邻的位置高或者相等;
每一个“矮”位置的小朋友要比相邻的位置矮或者相等;
要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。
例如,在示范小队{5,3,1,2,3}中,{5, 1, 3, 2, 3}是排序结果。
{5, 2, 3, 1, 3} 虽然也满足“高”“矮”“高”“矮”顺序排列,
但小朋友们的移动距离大,所以不是最优结果。
移动距离的定义如下所示:
第二位小朋友移到第三位小朋友后面,移动距离为1,
若移动到第四位小朋友后面,移动距离为2;输入描述:排序前的小朋友,以英文空格的正整数:4 3 5 7 8注:小朋友<100个
输出描述:排序后的小朋友,以英文空格分割的正整数:4 3 7 5 8
备注:4(高)3(矮)7(高)5(矮)8(高),
输出结果为最小移动距离,只有5和7交换了位置,移动距离都是1.示例一:输入4 1 3 5 2输出4 1 5 2 3示例二:输入1 1 1 1 1输出1 1 1 1 1说明:相邻位置可以相等示例三:输入:xxx输出[]说明:出现非法参数情况,返回空数组
// PS:对案例// 输入// 4 1 3 5 2// 输出// 4 1 5 2 3// 有疑问,最有不应该是 4 1 3 2 5 吗??? 代码是照着案例写的,我认为通过率没有100%,没有测试数据,网上好多答案也是这样子写的,懵了// 交叉排序public static void test071() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();List<Integer> list = new ArrayList<>();try {String[] split = line.split(" ");for (int i = 0; i < split.length; i++) {list.add(Integer.parseInt(split[i]));}}catch (Exception e){// 输入异常情况System.out.println("[]");return;}// 用于判断当前是高矮 还是 矮高boolean flag = true;for (int i = 0; i + 1 < list.size(); i++) {if (flag) {// 高 矮if (list.get(i) < list.get(i + 1)) {// 是矮 高,则交换位置int temp = list.get(i);list.set(i, list.get(i + 1));list.set(i + 1, temp);}// 判断完高 矮,切换为 矮 高flag = false;} else {// 矮 高if (list.get(i) > list.get(i + 1)) {// 是高 矮,则交换位置int temp = list.get(i);list.set(i, list.get(i + 1));list.set(i + 1, temp);}// 判断完矮 高,切换为高 矮flag = true;}}for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i) + " ");}}
70.水仙花数
所谓的水仙花数是指一个n位的正整数其各位数字的n次方的和等于该数本身,
例如153=1^3+5^3+3^3,153是一个三位数
输入描述第一行输入一个整数N,表示N位的正整数N在3-7之间包含3,7第二行输入一个正整数M,表示需要返回第M个水仙花数
输出描述返回长度是N的第M个水仙花数,个数从0开始编号,若M大于水仙花数的个数返回最后一个水仙花数和M的乘积,若输入不合法返回-1示例一:输入30输出153说明:153是第一个水仙花数示例二:输入91输出-1
// 水仙花数public static void test070() {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();if (n < 3 || n > 7) {System.out.println(-1);return;}// 起始数int start = (int) Math.pow(10, n - 1);// 终止数int end = (int) Math.pow(10, n);List<Integer> reslist = new ArrayList<>();for (int i = start; i < end; i++) {int sum = 0;// 求每位数的简单解法// String[] split = (i + "").split("");// for (String s : split) {// sum += Math.pow(Integer.parseInt(s), n);// }// 算出每位数List<Integer> list1 = singleNum(i);for (Integer s : list1) {// 每位数进行n次方并累加sum += Math.pow(s, n);}// 满足要求的放进结果集中if (sum == i) {reslist.add(i);}}if (m >= reslist.size()) {System.out.println(reslist.get(reslist.size() - 1) * m);} else {System.out.println(reslist.get(m));}}/*** 将一个整型数从后往前输出单个数字* @param num* @return*/public static List<Integer> singleNum(int num){List<Integer> list = new ArrayList<>();while (num > 0) {int singleNum = num % 10;list.add(singleNum);num = num /10;}return list;}
69.消除相邻且相同字母
游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。输出最终得到的字符串长度.输入描述:输入原始字符串str只能包含大小写英文字母,字母的大小写敏感,str长度不超过100输出描述输出游戏结束后,最终得到的字符串长度示例一:输入gg输出0说明 gg可以直接消除 得到空串 长度为0示例2输入:mMbccbc输出3说明mMbccbc中 可以先消除cc 此时变为mMbbc再消除 bb 此时变成mMc此时没有相同且相邻的字符 无法继续消除最终得到字符串mMc 长度为3备注:输入中包含非大小写英文字母时均为异常输入直接返回0
// PS:字符串中的<两个>字母如果相邻且相同,就可以消除,相同的字符只能两两删除,比如有3个只能删2个// 消除相邻且相同字母public static void test069() {Scanner sc = new Scanner(System.in);String line = sc.nextLine();// replaceAll 可以用正则表达式; [a-zA-Z]:匹配a-zA-Z其中一个//String newLine = line.replaceAll("[a-z]|[A-Z]", "");String newLine = line.replaceAll("[a-zA-Z]", "");// 异常输入if (newLine.length() > 0) {System.out.println(0);return;}for (int i = 0; i < line.length() - 1; i++){if (line.charAt(i) == line.charAt(i+1)) {// 两个字符相等,则消除line = line.replaceFirst(line.substring(i, i+2), "");// 需要把指针回到前一个字符if (i == 0){ i = i - 1; // 因为是开头,只需要-1抵消后面的i++} else {i = i - 2; // -1回退到前一个字符,再-1抵消后面的i++}}}
// System.out.println(line);System.out.println(line.length());}
更多华为od机试题请点这里<华为od机试题3 真题>,每篇8题,有更多的题也请告诉我啊
华为od机试题2 真题相关推荐
- 华为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机试题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 机 ...
最新文章
- 医疗信息安全再添新保障
- spring--源码分析
- react学习(7)----react转换值同render
- 无窗口激活ActiveX控件的bug
- 分布式系统一致性协议--Paxos算法
- java 基础编程题 5
- 主流框架的搭建(VUE,React)
- 程序员的圣诞节后-零
- Unity编辑器扩展之RequireComponent等详解
- 不懂代码也想学会深度学习?这本书告诉你真的很简单
- Java技术栈及重要点汇总(*)
- 淘宝新店铺如何打造爆款
- SQL计算个人所得税函数
- 【目标检测】《DINO: DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection》论文阅读笔记
- vue:不同环境配置不同打包命令
- 2020美团笔试题目:送餐小区数量
- 曾国藩:成大事者不纠结
- 《俗人笔记》之《Java基础语法上》
- java毕业设计基于的测试项目管理平台Mybatis+系统+数据库+调试部署
- MobileNets 论文笔记