Сумма подряд идущих без индексации

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

Дан массив целых чисел a[1], a[2], ..., a[n] и натуральные числа k и m.

Укажите минимальное значение i, для которого a[i] + a[i+1] + ... + a[i + k] = m (то есть сумма k + 1 подряд идущих элементов массива равна m).

Если такого значения нет, то выведите 0. Вложенные циклы и дополнительные массивы не использовать (требуется решить задачу за один проход исходного массива). Входные данные

На вход программе сначала подаются значения n, k и m (m <= 1000000000, 0 < k < n <= 100000; n - количество элементов в массиве). В следующей строке входных данных расположены сами элементы массива - целые числа, по модулю не превосходящие 100. Выходные данные

Выведите ответ на задачу.


Я написал следующий код

#include <iostream>

using namespace std;

void base_input(int& n) {
    cin >> n;
}

void input(int mass[], int n) {
    int* p = mass;
    for (; p < mass + n; ++p) {
        cin >> *(p);
    }
}

int resolve(int mass[], int n, int k, int m) {
    int summ = 0;
    for (int* p = mass; p < mass + n; ++p) {
        summ += *p;
        if (p - mass > k) {
            summ -= *(p - k - 1);
        }
        if (summ == m) {
            return p - mass - k + 1;
        }
    }
    return 0;
}

int main() {
    int n;
    base_input(n);
    int k;
    base_input(k);
    int m;
    base_input(m);
    int mass[n];
    input(mass, n);
    cout << resolve(mass, n, k, m);
    return 0;
}

но у меня не проходит 2 из 33 трех тестов, помогите найти ошибку


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

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

Проще написать с нуля...

#include <iostream>
using namespace std;

int main()
{
    int n,k,m, s = 0;
    cin >> n >> k >> m;
    int * a = new int[n];
    for(int i = 0; i <= n; ++i) cin >> *(a+i);
    for(int i = 0; i <= k; ++i) s += *(a+i);
    if (s == m) { cout << 1; return 0; }
    for(int i = 0, j = k+1; j < n; ++j, ++i)
        if ((s = s - *(a+i)+*(a+j)) == m) { cout << (i+2); return 0; }
    cout << 0;
}
→ Ссылка