小南找书(20分)
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
题目描述
小南热心志愿者活动,有时间的时候会在图书馆帮忙整理书籍。图书馆有一个很大的书架,书架一共有n(1≤n≤103)层,第i层上放了ai (1 ≤ ai ≤ 103)本书。每本书用连续的数字进行了编号:第1层书架上的书从1号到a1号,第2层放的书是从a1+1号到a1 + a2号,以此类推。
例如:当n等于2,a1为1,a2为3时,第1层书架上的1本书编号为1,第2层书架上的3本书编号依次为2、3、4。
小南想让你帮他编程实现,对于给定的书的编号,快速找到这本书在书架的第几层上。
说明:数组定义时如果长度大于10^6,有些编译器需要定为外部变量。
输入
多个样例。 每个样例输入包括4行:
第1行输入一个整数n (1≤n≤ 103),代表书架的层数。
第2行输入n个整数a1, a2, …, an (1≤ai ≤103,a1+a2+…+ an ≤106),其中ai代表第i层书架上的书的数量。
第3行输入一个整数m (1≤m≤103)代表小南要找的书的数量。
第4行输入m个整数b1, b2, …,bm(1 ≤ bi ≤a1+a2+…+ an),分别表示小南要找的m本书的编号。
输出
每个样例输出m行,第i行包含一个整数,代表编号为 bi的书所在的书架的层数。
样例输入 Copy
2
1 3
2
1 3
5
1 8 3 5 8
3
1 24 11
样例输出 Copy
1
2
1
5
3
#include<stdio.h>
int arr[1000000] = { 0 };
int main(void)
{
int n = 0;
while (~scanf("%d", &n))
{
int a = 0, m = 0, b = 0, sum = 0;
for (int i = 1; i <= n; i++)
{
scanf("%d", &a);
sum += a;
for (int x = sum - a + 1; x <= sum; x++)
{
arr[x] = i;
}
}
scanf("%d", &m);
while (m--)
{
scanf("%d", &b);
printf("%d\n", arr[b]);
}
}
return 0;
}
注意1,数组定义时如果长度大于10^6,有些编译器需要定为外部变量
2注意变量声明位置。