Найти номер i в массиве такой, что сумма всех элементов с номерами > i будет равна сумме элементов с номерами < i

Задание: Найти номер i в массиве такой, что сумма всех элементов с номерами > i будет равна сумме элементов с номерами < i.

Моё решение:

#include <iostream>
using namespace std;
int main() {
    long long num;
    cin >> num;
    long long *arr = new long long[num];
    long long summa_back = 0, summa_forward = 0;

    for (int i = 0; i < num; i++) {
        int x;
        cin >> x;
        arr[i] = x;
    }
    long long count = 0;
    for (int i = 1; i < num; i++) {
        count += 1;
        summa_back += arr[i - count];
        summa_forward += arr[i + count];
        if (summa_back == summa_forward) {
            cout << i << endl;
            break;
        }
    }
    return 0;
}
`

Пытался реализовать подобным образом, но программа вообще отказывается, что либо выводить. Подскажите, в чём я ошибся?


Ответы (1 шт):

Автор решения: Harry

Вы (и то не совсем верно) ищете, когда некоторое количество элементов с начала будет равно такому же количеству элементов с конца... Надо примерно так:

int main()
{
    long long num, sum = 0;
    cin >> num;
    long long *arr = new long long[num];
    for (long long i = 0; i < num; i++)
    {
        cin >> arr[i];
        sum += arr[i];
    }
    long long lsum = 0;
    for (long long i = 0; i < num - 1; i++)
    {
        lsum += arr[i];
        if (lsum == sum - lsum - arr[i+1])
        {
            cout << "i = " << i+1 << endl;
            return 0;
        }
    }
    cout << "It's impossible\n";
}
→ Ссылка