华为OD E卷(100分)10-孙悟空吃蟠桃

前言

        工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老, 没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练手。希望通过这些分享能够帮到一些人,也希望能和看到此文的大神们沟通交流,提升自己,更希望在此期间能够找到一份理想的工作。

题目描述

        孙悟空来到了蟠桃园偷吃蟠桃。蟠桃园有N棵桃树,每棵树上都有一定数量的蟠桃。守卫将在H小时后回来。
        孙悟空每小时可以选择吃一棵树上的所有蟠桃(如果数量少于他选择的速度,则全部吃掉),并且在这一个小时内不会吃其他树上的桃子。
        孙悟空希望以尽可能慢的速度吃蟠桃,但又要确保在守卫回来之前吃完所有的桃子。
        题目要求计算孙悟空能在H小时内吃完所有桃子的最小速度K(个/小时),如果以任何速度都吃不完,则返回0。

输入

        第一行输入为N个数字,表示桃树的数量,接下来是N个数字,用空格分隔,表示每棵桃树上蟠桃的数量。
        第二行输入为一个数字H,表示守卫离开的时间(小时)。 

输出

        输出一个整数,表示孙悟空能在H小时内吃完所有桃子的最小速度K。如果以任何速度都吃不完,则输出0。 

示例

样例1

输入
2 3 4 5 
4
输出
5
解析:对于样例1,孙悟空以每小时吃5个蟠桃的速度,可以在4小时内吃完所有蟠桃,这是最小的可行速度。

样例2

输入
2 3 4 5
3
输出
0
解析:即使孙悟空以最快速度吃桃,也无法在3小时内吃完所有蟠桃,因此输出0。

样例3

输入
30 11 23 4 20
6
输出
23
解析:孙悟空需要以每小时至少吃23个蟠桃的速度,才能在6小时内吃完所有蟠桃。

解题思路

  1. 当给定小时数小于桃树棵树,无论如何也吃不完;
  2. 当给定小时数等于桃树棵树,取树上桃子最多的数目为速度;
  3. 当给定小时数大于桃树棵树,从速度1开始计算时间,直到所得时间大于给定时间为止,这时其前一个速度就是满足条件的最小速度;

题解

java实现

package huawei.e100;

import java.util.Arrays;
import java.util.Scanner;

/**
* @author arnold
* @date 2024年12月10日
* 
*/
public class T10 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String line = sc.nextLine();
			if (line.equals("")) {
				line = sc.nextLine();
			}
			String[] tmp = line.split(" ");
			int[] trees = new int[tmp.length];
			for (int i = 0; i< tmp.length; i++) {
				trees[i] = Integer.parseInt(tmp[i]);
			}
			int h = sc.nextInt();
			
			int maxnum = Arrays.stream(trees).max().getAsInt();
			if (trees.length > h) {
				System.out.println(0);
			} else if (trees.length == h) {
				System.out.println(maxnum);
			} else {
				int res = run(trees, h);
				System.out.println(res);
			}
		}

	}
	
	private static int run(int[] trees, int h) {
		// 从小向大去找
		int speed = 1;
		int time = Integer.MAX_VALUE;
		while (time > h) {
			time = 0;
			for (int i = 0; i< trees.length; i++) {
				time += usedTime(trees[i], speed);
				if(time > h) {
					break;
				}
			}
			speed++;
		}
		return speed-1;
	}
	static int usedTime(int num, int speed) {
		int usedTime = 0;
		if(num > speed) {
			int t = num/speed;
			usedTime = num%speed ==0 ? t : (t +1);
		} else {
			usedTime = 1;
		}
		return usedTime;
	}

}
孙悟空蟠桃时,华为OD可能会通过其技术和产品提供支持与帮助。 首先,华为OD华为的开放开发平台,为开发者和合作伙伴提供了丰富的技术资源和开发工具。在孙悟空蟠桃的场景下,华为OD可能会提供一种基于物联网技术的智能食品追溯系统。这个系统可以追踪蟠桃的种植、采摘、存储、运输等环节的信息,确保蟠桃的安全和品质。开发者可以通过华为OD平台的技术资源和工具,以及与华为合作伙伴的协作,构建这样一个智能食品追溯系统。 其次,华为OD平台可能还提供一些与孙悟空蟠桃相关的应用程序。比如,一个基于华为OD平台的智能家居应用,可以通过识别孙悟空的声音或人脸,自动提供一些便利的功能。比如,当孙悟空靠近蟠桃时,系统可以自动将蟠桃洗净或剥皮,或者提供一些有关蟠桃的健康食谱推荐。 最后,华为OD平台还可能提供一些与蟠桃相关的社交媒体应用。可以想象,孙悟空蟠桃的场景会引起很多人的兴趣和关注,人们可能愿意享自己的蟠桃经历、菜谱或者与孙悟空的互动等。华为OD平台可以提供一个社交媒体平台,让用户可以方便地享和交流这些有趣的内容。 总之,华为OD可能会通过技术支持、应用开发和社交媒体等方面,为孙悟空蟠桃这个场景提供多样化的解决方案和体验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

arnold66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值