首页 > 解决方案 > 如何在数组中找到一个元素,使得左数组的总和等于右数组的总和

问题描述

这是代码应该生成的输入和输出:

解释:如果 2 是分区,则:1+ 4=5(LHS)并且5+0=5(RHS)应该打印2,但在我的情况下,我没有得到输出。

我用这样的逻辑尝试了我的代码......第n个元素将出现在数组之间的某个地方。因此,考虑到 arr 的元素总和直到第 n 个元素将是 LHS,而从第 n 个元素开始,它将一直到 arr 的末尾,即 RHS。我还添加了一个while循环,它增加了指向元素n。

#include <iostream.h>
#include <conio.h>
void main(){
   int arr[5],arr2[5],i,j=0,k=0,n=1;
   cout<<"input_arr\n";
   for(i=0;i<5;i++)
    cin>>arr[i];

   while(n<=5)
{
   for(i=n;i<5;n++)
      j+=arr[i];   //sum of right side arr from n-th   element
   for(i=0;i<n;i++)
    k+=arr2[i];  //sum of left side arr till n-th element
   if(k==j)
    cout<<"\n"<<arr[n];  // prints the equilbrium element
   else
         n++;
}
    getch();
}

标签: c++arraysturbo-c++

解决方案


我会给你一些提示,可以指导你找到解决方案:

  1. 一次计算数组中的总和。我们称之为totalSum
  2. 做第二遍并计算partialSum,直到您处理的位置(但不包括在内)。假设这是i,值为a[i]。如果totalSum - partialSum - a[i] = partialSum,则位置i是您的答案,而a[i]是它的值。

推荐阅读