这是代码应生成的输入和输出:
1 4 2 5 0
2
说明:如果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();
}
答案 0 :(得分:0)
我会给您一些提示,以指导您解决问题:
totalSum - partialSum - a[i] = partialSum
,则位置 i 是您的答案,而 a [i] 是其值。答案 1 :(得分:0)
首先,如果我理解正确,则希望使用此方法在每次迭代中重置j,k。
第二,出于某种原因,第二个for循环将n而不是i递增。
第三,您还要声明arr2,而不是对其进行初始化,并出于某种原因将arr2中的值添加到k。
您还包括中位数。尝试n =2。
j = arr [2] + arr [3] + arr [4] = 2 + 5 + 0 = 7
k = arr [0] + arr [1] = 1 + 4 = 0
对while循环的建议更改(以保持相同的方法):
while (n <= 5) {
j = 0; k = 0;
for (i = n+1; i < 5; i++) {
j+= arr[i];
}
for (i = 0; i < n; i++) {
k+= arr[i]
}
if (k == j) {
cout << "\n" << arr[n];
break; //you should end the for loop here
}
n++;
}
答案 2 :(得分:0)
当您对数组的右侧求和时,您将从均衡元素开始:
假设n = 2
,您输入的是[1, 4, 2, 5, 0]
while(n<=5) {
for(i=n;i<5;n++)
j+=arr[i]; //sum of right side arr from n-th element
}
数组右侧的总和将从i = 2
开始,因此它将是2 + 5 + 0
而不是5 + 0
。
调试此类问题的一种快速简便的方法是打印每个步骤的操作(在您的情况下,它选择要汇总的索引),以便您可以快速诊断您是否在做您不应该做的事情
此外,您当前的方法不是最佳方法,但这是一个很好的起点。我敦促您在使此解决方案生效后尝试其他方法。