算法题--华为od机试考试(分苹果、字符串统计及重排、高矮个子排队)

目录

分苹果

题目描述

输入描述

输出描述

示例1

输入

输出

备注

示例2

输入

输出

解析

答案

字符统计及重排

题目描述

输入描述

输出描述

示例1

输入

输出

说明

示例2

输入

输出

说明

解析

答案

高矮个子排队

题目描述

输入描述

输出描述

备注

示例1

输入

输出

示例2

输入

输出

说明

示例3

输入

输出

说明

解析

答案


分苹果

考察二进制的异或操作。

题目描述

B两个人把苹果分成两堆,A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算进位12+5=9(1100+0101=9),B的计算规则是十进制加法,包括正常进位,B希望在满足A情况下获取苹果重量最多。输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。如果无法满足A的要求,输出-1.

1<=总苹果数量<=20000

1<=每个苹果重量<=10000

输入描述

输入第一行是苹果数量:3

输入第二行是每个苹果重量: 3 5 6

输出描述

输出第一行是B获取的苹果总重量:11

示例1

输入

3

3 5 6

输出

11

备注

按照A的计算方法5+6=3(101+110不算进位的话值为3)

示例2

输入

8

7258 6579 2602 6716 3050 3564 5396 1773

输出

35165

解析

首先要求清楚A的加法实际上就是异或操作,即1和0才等于1,1和1与0和0都是为0。

这里要通过具体实例观察,例如3 = 5+6,每次满足A的要求,等式两边相等,当两边二进制相等时,两边的数异或等于0即所有的数异或为0时可以满足A的要求。

在满足A的要求情况下,减去一个最小的数既可以满足B的要求。

答案

function dispenseApple(...args) {
    if (args.length <= 1) {
        return -1
    }
    // 从小到大排序
    args.sort((a, b) => a - b)
    // 所有的数异或为0才可以按A的规则等分
    if (!args.reduce((t, v) => t ^ v)) {
        // 所有数相加后减去最小的数
        let t = args.reduce((t, v) => t + v)
        return t - args[0]
    }
    return -1
}
console.log(dispenseApple(3, 5, 6))
console.log(dispenseApple(7258, 6579, 2602, 6716, 3050, 3564, 5396, 1773))

字符统计及重排

考察排序,hash。

题目描述

给出一个仅包含字母的字符串,不包含空格,统计字符串中各个字母(区分大小写)出现的次数,并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。 如果次数相同,按照自然顺序进行排序,且小写字母在大写字母之前。,

输入描述

输入一行,为一个仅包含字母的字符串。

输出描述

按照字母出现次数从大到小的顺序输出各个字母和字母次数,用英文分号分隔,注意末尾的分号;字母和次数间用英文冒号分隔。

示例1

输入

xyxyXX

输出

x:2;y:2;X:2;

MATLAB主动噪声振动控制算法——对较大的次级路径变化具有鲁棒性内容概要:本文主要介绍了一种在MATLAB环境下实现的主动噪声振动控制算法,该算法针对较大的次级路径变化具有较强的鲁棒性。文中详细阐述了算法的设计原理实现方法,重点解决了传统控制系统中因次级路径动态变化导致性能下降的问题。通过引入自适应鲁棒控制策略,提升了系统在复杂环境下的稳定性控制精度,适用于需要精度噪声振动抑制的实际工程场景。此外,文档还列举了多个MATLAB仿真实例及相关科研技术服务内容,涵盖信号处理、智能优化、器学习等多个交叉领域。; 适合人群:具备一定MATLAB编程基础控制系统理论知识的科研人员及工程技术人员,尤其适合从事噪声振动控制、信号处理、自动化等相关领域的研究生工程师。; 使用场景及目标:①应用于汽车、航空航天、精密仪器等对噪声振动敏感的工业领域;②用于提升现有主动控制系统对参数变化的适应能力;③为相关科研项目提供算法验证仿真平台支持; 阅读建议:建议读者结合提供的MATLAB代码进行仿真实验,深入理解算法在不同次级路径条件下的响应特性,并可通过调整控制参数进一步探究其鲁棒性边界。同时可参考文档中列出的相关技术案例拓展应用场景。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值