代码随想录补充题目:区间和

60 阅读1分钟
  1. 区间和(第九期模拟笔试)
题目描述

给定一个整数数组 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到东西自然会返回真值。