【华为OD题目0008-双十一】

华为OD题目0008-双十一

华为OD题目0008-双十一

题目描述
双十一众多商品进行打折销售,小明想购买一些自己心仪的商品,
但由于受购买资金限制,所以他决定从众多心意商品中购买3件,
而且想尽可能的花完资金,
现在请你设计一个程序帮助小明计算尽可能花费的最大资金额。

输入描述
第一行为整型数组M,数组长度小于100,数组元素记录单个商品的价格;
单个商品价格小于1000;
第二行输入为购买资金的额度R;
R < 100000。

输出描述
输出为满足上述条件的最大花费额度
如果不存在满足上述条件的商品请返回-1

示例一
输入
23,26,36,27
78
输出
76

示例二
输入
23,30,40
26
输出
-1

直接上代码如下:


import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String m = sc.nextLine();
        int r = sc.nextInt();
        solution(m,r);
    }


    private static void solution(String m,int r){
        String[] goodsPricesString = m.split(",");
        int[] goodsPrices = new int[goodsPricesString.length];
        for (int i =0;i<goodsPricesString.length;i++){
            goodsPrices[i] = Integer.parseInt(goodsPricesString[i]);
        }
        Arrays.sort(goodsPrices);
        if(goodsPrices.length < 3 || goodsPrices[0] + goodsPrices[1] + goodsPrices[2] > r){
            System.out.println(-1);
            return;
        }
        for(int i = goodsPrices.length-1;i>=0;i--){
            if(goodsPrices[i] + goodsPrices[i-1] + goodsPrices[i-2] < r){
                int sum = goodsPrices[i] + goodsPrices[i-1] + goodsPrices[i-2];
                System.out.print(sum);
                return;
            }

        }
    }
}

跟其他代码稍微不同之处:
使用数组的sort()函数排序后,肯定是从小到大,因此采用for循环从大小进行遍历,第一个遇到最大的三个数小于经费总额时,立即将最大的三个数的sum()和输出就行,该数值就是在有限钱下,所能最大化的花完钱(买了相对最贵的三个物品)
若有疑问,欢迎沟通!

在Robot Operating System (ROS)中,编写简单的消息发布器订阅通常涉及以下几个步骤: 1. **安装必要的包**: 首先,确保已经安装了ROS并配置好环境。如果还没有,可以访问ROS官方网站下载适合的操作系统的版本,并按照教程设置。 2. **创建消息类型**: 使用`msg`包定义自定义的消息类型,例如`std_msgs/String`或自定义的消息文件。例如: ```bash rosmsg gen msg MyCustomMessage ``` 3. **发布器(Publisher)**: 使用`rospy`库中的`publisish()`函数创建一个发布器。这里是一个基本示例,假设你有名为`my_message`的变量存储自定义消息: ```python import rospy from my_custom_package.msg import MyCustomMessage def publish_message(): pub = rospy.Publisher('my_topic', MyCustomMessage, queue_size=10) msg = MyCustomMessage(data="Hello ROS!") while not rospy.is_shutdown(): pub.publish(msg) rospy.sleep(1) if __name__ == '__main__': rospy.init_node('publisher') try: publish_message() except rospy.ROSInterruptException: pass ``` 这里,我们创建了一个节点,并指定主题(`my_topic`),然后每秒发送一条消息。 4. **订阅(Subscriber)**: 使用`subcriber()`函数创建一个订阅,它会在接收到消息时触发回调函数: ```python import rospy from my_custom_package.msg import MyCustomMessage def message_callback(msg): print("Received message:", msg.data) def subscribe_to_topic(): rospy.Subscriber('my_topic', MyCustomMessage, message_callback) rospy.spin() if __name__ == '__main__': rospy.init_node('subscriber') try: subscribe_to_topic() except rospy.ROSInterruptException: pass ``` 这里,我们创建了一个监听者,当`my_topic`上发布新消息时,会打印消息内容。 5. **启动节点服务**: 确保发布器订阅都在各自的独立节点上运行。分别运行这两个Python脚本,发布器会开始在指定主题上发送消息,而订阅会接收并处理这些消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值