华为od 小朋友来自多少分区 C++

小朋友来自多少分区

题目描述

幼儿园组织活动,老师布置了一个任务:

每个小朋友去了解与自己同一个小区的小朋友还有几个。

我们将这些数量汇总到数组 garden 中。

请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区 输出来自这几个小区的小朋友有多少?(ps 这里跟说明、输出有矛盾 以输出为准 我自己改了下问题)

输入描述

输入:garden[] = {2, 2, 3}

输出描述

输出:7

备注

  • garden 数组长度最大为 999
  • 每个小区的小朋友数量最多 1000 人,也就是 garden[i] 的范围为 [0, 999]

用例1

输入

2 2 3

输出

7

说明

第一个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。

第二个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。

这两个小朋友,可能是同一小区的,且此小区的小朋友只有3个人。

第三个小区反馈还有3个小朋友与自己同一小区,则这些小朋友只能是另外一个小区的。这个小区有4个小朋友。

代码

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int main() {
    // 读取输入
    vector<int> garden;
    int num;
    int minChildren = 0;
    while (cin >> num) {
        garden.push_back(num);
        if (cin.get() == '\n') {
            break; // 如果遇到回车符则结束输入
        }
    }

    // 将数组每个元素加1  相当于加上每个小朋友自己
    for (int& num : garden) {
        num += 1;
    }

    // 统计数组中每个元素出现的次数     每个小区有多少个小朋友
    unordered_map<int, int> counts;
    for (int num : garden) {
        counts[num]++;
    }

    // 打印每个元素及其出现次数    
    for (const auto& entry : counts) {
        //cout << "Element: " << entry.first << ", Count: " << entry.second << endl;
        if(entry.first<entry.second)        //考虑去除重复的:报一样的数字可能来自于同一个小区
        {
            int temp = (entry.second/entry.first +1)*entry.first;
            minChildren +=temp;
        }
        else
        {
            minChildren +=entry.first;
        }

    }
    cout<<minChildren<<endl;

    return 0;
}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值