题目描述
小组编号问题。输入一组数【2,7,3,4,9】,表示第一组有2个人,编号为【1、2】,第二组有7个人编号为【39】,第三组有3个人编号为【1012】,第四组有4个人编号为【1316】,第五组有9个人编号为【1725】。
现在求,编号为1、25、11的人分别在哪个组里。
示例:
输入
5
2 7 3 4 9
3
1 25 11
输出
1 5 3
思路:第一个想法就是计数问题,依次累加小组成员数,如果组员数刚好大于等于编号,则输出当前组。比如现在求编号为11的人在哪个组。第一组有2个人,第二组有7个人,第三组有3个人,2 + 7 + 3 > 11 所以11在第三组里。感觉比不是很好的思路,每次都需要从头开始累加,计算量较大。
public class Solution {
public static int[] getRes(int[] arr, int[] query) {
int[] res = new int[query.length];
for (int i = 0; i < query.length; i++) {
int sum=0;
for (int j = 0; j <arr.length ; j++) {
sum+=arr[j];
if(sum>=query[i]){
res[i]=j+1;
break;
}
}
}
return res;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int[] arr=new int[n];
for (int i = 0; i <n ; i++) {
arr[i]=sc.nextInt();
}
int m=sc.nextInt();
int[] query=new int[m];
for (int i = 0; i <m ; i++) {
query[i]=sc.nextInt();
}
int[] res=getRes(arr,query);
for (int i = 0; i <m ; i++) {
System.out.print(res[i]+" ");
}
}
}
}