小朋友来自多少分区
题目描述
幼儿园组织活动,老师布置了一个任务:
每个小朋友去了解与自己同一个小区的小朋友还有几个。
我们将这些数量汇总到数组 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;
}