题目描述:
幼儿园组织活动,老师布置了一个任务:每个小朋友去了解与自己同一个小区的小朋友还有几个。我们将这些数量汇总到数组garden中。
请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区?
输入描述:
输入:garden[] = {2, 2, 3}
说明:
garden数组长度最大为999
每个小区的小朋友数量最多1000人,也就是garden[i]的范围为[0,999]
输出描述:
输出:7
示例1
输入:
2 2 3
输出:
7
解释:
第一个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友
第二个小朋友反馈有两个小朋友和自己同一小区,即此小区有3个小朋友。
这两个小朋友,可能是同一小区的,且此小区的小朋友只有3个人。
第三个小区反馈还有3个小朋友与自己同一小区,则这些小朋友只能是另外一个小区的。这个小区有4个小朋友。
问题:
题目描述中的设问是有问题的。
按照示例和说明,“计算班级小朋友至少来自几个小区?”这个问题是不正确。正确的问题应该是“计算班级里至少有几个小朋友?”。
另外,从示例可以得知,虽然最终算出班级里至少有
7
个小朋友,但只有3
个小朋友给出了小区信息。所以garden
数组的长度,并不能直接得到小朋友的总数。
代码
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
while (in.hasNext()) {
int key=in.nextInt()+1;
int value=0;
if(map.containsKey(key)){
value=map.get(key)+1;
map.put(key,value);
}else{
map.put(key,1);
}
}
int sum=0;
for(Map.Entry<Integer,Integer> entry:map.entrySet()){
int k=entry.getKey();
int v=entry.getValue();
if(v%k==0){
sum+=(v/k)*k;
}else{
sum+=(v/k+1)*k;
}
}
System.out.println(sum);
}
}