在C++中构造一个包含给定范围内元素总和的数组


给定一个仅包含整数的数组 arr[] 和一个奇数和 sum。目标是创建一个和数组 arr_2[],使得每个 arr_2[i] 等于 arr[] 中前面 sum/2 个元素的和 + arr[i] + arr[] 中后面 sum/2 个元素的和。如果 sum 为 1,则 arr_2[i] = arr[i]

例如

输入

arr[] = { 4, 1, 7, 5, 2, 9} sum=3

输出

Construction of sum-array with sum of elements in given range are: 5 12 13 14
16 17 17 9 3

解释

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1] = 4+1 = 5
arr_2[1]=arr[0]+arr[1]+arr[2] = 4+1+7 = 12
arr_2[2]=arr[1]+arr[2]+arr[3] = 1+7+5 = 13
arr_2[3]=arr[2]+arr[3]+arr[4] = 7+5+2 = 14
arr_2[4]=arr[3]+arr[4]+arr[5] = 5+2+9 = 16
arr_2[5]=arr[4]+arr[5] = 2+9 = 11s

输入

arr[] = { 1,2,3,4,5 } sum=5

输出

Construction of sum-array with sum of elements in given range are − 6 10 15 14
12

解释

The sum array is constructed as:
arr_2[0]=arr[0]+arr[1]+arr[2] = 1+2+3 = 6
arr_2[1]=arr[0]+arr[1]+arr[2]+arr[3] = 1+2+3+4= 10
arr_2[2]=arr[0]+arr[1]+arr[2]+arr[3]+arr[4] = 1+2+3+4+5 = 15
arr_2[3]=arr[1]+arr[2]+arr[3]+arr[4] = 2+3+4+5= 14
arr_2[4]=arr[2]+arr[3]+arr[4]= 3+4+5 = 12

以下程序中使用的方案如下

在这个方案中,我们将使用滑动窗口的概念。将下一个最右边的元素添加到之前的窗口和中,并从该窗口中删除最左边的元素。

  • 将一个整数数组 arr[] 和一个值 sum 作为输入。

  • 函数 sum_array(int arr[], int size, int sum) 返回一个包含给定范围内元素总和的和数组。

  • 将初始计数设为 0。

  • 将和数组设为 arr_2[size]。

  • 设 temp = sum / 2 + 1。

  • 将从 0 到 temp 的 temp 个元素添加到计数中。并将 arr_2[0] 设为计数。

  • 对于和数组的下一个元素,使用 for 循环从 i=1 到 i<size 进行遍历。

  • 设 temp_1 = i − (sum / 2) − 1。如果它 >= 0,则从计数中减去 arr[temp_1]。

  • 设 temp_2 = i + (sum / 2)。如果它 < size,则将 arr[temp_2] 添加到计数中。

  • 设置 arr_2[i] = count。

  • 在 for 循环结束时,我们将得到 arr_2[] 作为和数组。

  • 使用 for 循环打印和数组 arr_2[]。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
void sum_array(int arr[], int size, int sum){
   int count = 0;
   int arr_2[size];
   int temp = sum / 2 + 1;
   for (int i = 0; i < temp; i++){
      count = count + arr[i];
   }
   arr_2[0] = count;
   for (int i = 1; i < size; i++){
      int temp_1 = i − (sum / 2) − 1;
      if (temp_1 >= 0){
         count = count − arr[temp_1];
      }
      int temp_2 = i + (sum / 2);
      if (temp_2 < size){
         count = count + arr[temp_2];
      }
      arr_2[i] = count;
   }
   cout<<"Construction of sum−array with sum of elements in given range are: ";
   for (int i = 0; i < size; i++){
      cout<< arr_2[i] << " ";
   }
}
int main(){
   int arr[] = { 4, 1, 7, 5, 2, 9, 6, 2, 1 };
   int sum = 3;
   int size = sizeof(arr) / sizeof(int);
   sum_array(arr, size, sum);
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

Construction of sum-array with sum of elements in given range are − 5 12 13 14 16 17 17 9 3

更新于:2021年1月5日

489 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告