- 区间和(第九期模拟笔试)
题目描述
给定一个整数数组 Array,请计算该数组在每个指定区间内元素的总和。
输入描述
第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。
输出描述
输出每个指定区间内元素的总和。
输入示例
5
1
2
3
4
5
0 1
1 3
输出示例
3
9
提示信息
数据范围:
0 < n <= 100000
题解:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n, i, left, right;
scanf("%d", &n);
int* array = (int*)malloc(sizeof(int) * n);
int* arraysum = (int*)malloc(sizeof(int) * n);
for (i = 0;i < n;i ++)
{
scanf("%d", &array[i]);
}
arraysum[0] = array[0];
for (i = 1;i < n;i ++)
{
arraysum[i] = array[i] + arraysum[i - 1];
}
while (scanf("%d %d", &left, &right))
{
if (left == 0)
{
printf("%d\n", arraysum[right]);
}
else
printf("%d\n", arraysum[right] - arraysum[left - 1]);
}
return 0;
}
检索一个返回一个区间和,和题目有一点不同不过不要紧。
最后实现持续检查是否还有检索请求用while (scanf("%d %d", &left, &right)),同时完成输入数据和判断是否还有数据输入。 scanf输入一个值,返回值会是1,这里输入两个,所以也可以写成while (scanf("%d %d", &left, &right) == 2),但是写成while (scanf("%d %d", &left, &right) == 1),就不对会出错。所以最好直接都不写,有scanf到东西自然会返回真值。