小南找书。

小南找书(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注意变量声明位置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值