Найти номер 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";
}