Как найти элемент в массиве так, чтобы сумма левого массива была равна сумме правого массива - PullRequest
0 голосов
/ 16 января 2019

здесь ввод и вывод, который должен сгенерировать код:

  • Ввод: 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();
}

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Прежде всего, вы хотите сбросить 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++;
}
0 голосов
/ 16 января 2019

Когда вы суммируете правую часть массива, вы начинаете с элемента равновесия:

давайте предположим, 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.

Быстрый и простой способ устранения проблем, подобных этой, состоит в том, чтобы напечатать, что делает каждый шаг (в вашем случае, какой индекс он выбирает для суммирования), чтобы вы могли быстро диагностировать, если вы делаете что-то, чего не должны делать .

Кроме того, ваш текущий метод не самый оптимальный подход, но это хорошее место для начала. Я призываю вас попробовать другой подход после того, как это решение заработает.

0 голосов
/ 16 января 2019

Я дам вам несколько советов, которые помогут вам найти решение:

  1. Рассчитать общую сумму в массиве за один проход. Давайте назовем это totalSum .
  2. Сделайте второй проход и вычислите partalSum до позиции, которую вы обработали (, но не включили ). Скажем, что это i со значением a [i] . Если totalSum - partialSum - a[i] = partialSum, то позиция i является вашим ответом, а a [i] является ее значением.
...