小朋友至少有几个 - 华为OD统一考试(C卷)
OD统一考试(C卷)
分值: 100分
题解: Java / Python / C++
题目描述
幼儿园组织活动,老师布置了一个任务:
每个小朋友去了解与自己同一个小区的小朋友还有几个。
我们将这些数量汇总到数组 garden 中。
请根据这些小朋友给出的信息,计算小朋友至少有几个?
输入描述
输入:garden[] = {2, 2, 3}
说明:
- garden 数组长度最大为 999
- 每个小区的小朋友数量最多 1000 人,也就是 garden[i] 的范围为 [0, 999]
输出描述
输出:7
示例1
输入:
2 2 3
输出:
7
说明:
第一个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。
第二个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。
这两个小朋友,可能是同一小区的,且此小区的小朋友只有3个人。
第三个小区反馈还有3个小朋友与自己同一小区,则这些小朋友只能是另外一个小区的。这个小区有4个小朋友。
题解
通过例子来说明:
garden = {2,2} // 可能来自同一个小区, 学生人数 = 1(自己) + 2(其他小朋友个数)
graden = {2,2,2} // 可能来自同一个小区, 学生人数 = 1(自己) + 2(其他小朋友个数)
graden = {2,2,2,2} // 不可能来自同一个小区, 至少来自 2 个小区, 学生人数 = 2 * (1 + 2)
假如有 v 个小朋友说来自其他小区小朋友有 k 个:
- 则至少有小区个数: v / (k + 1) 向上取整 == (v + k) / (k + 1)
- 则每个小区的人数: 1(自己) + k(其他小朋友人数)
- 则至少小朋友数: (v + k) / (k + 1) * ( k + 1)
根据以上的总结, 就可以对小朋友给出的数据进行统计, 统计完后再根据统计数据计算出总的学生人数。
Java
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
* @author code5bug
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2024华为OD机试真题题解 文章被收录于专栏
华为OD机考(C卷、D卷)算法题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。 从 2024年4月24开始,考的都是华为OD统一考试(D卷),据已经参加D卷考试的同学反馈D卷和C卷是一样的,如果发现新题会及时更新。