3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
1

Найти индекс элемента списка сумма которого и k следующих элементов равна заданной

16.03.2016, 20:23. Показов 10676. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан массив целых чисел 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 <= 10000, 0 < k < n <= 30000; n - количество элементов в массиве). В следующей строке входных данных расположены сами элементы массива - целые числа, по модулю не превосходящие 100.

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

Примеры
входные данные
4 1 22
9 13 10 -11
выходные данные
1

Помогите пожалуйста решить
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2016, 20:23
Ответы с готовыми решениями:

Найти строки матрицы, где есть эл-т для которого сумма предшествующих равна сумме следующих за ним элементов
Доброго времени суток всем. Прошу помочь с этими заданиям, написать код в c++ 2. Вывести строки...

Найти индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от суммы элементов
Помогите написать код на Си!!!:-[ Для этой программы функции ввода и вывода массивов описывать...

Найти в массиве индекс элемента для которого сумма элементов, которые стоят до него
Задан массив, который состоит из n элементов. Найти в нём индекс элемента для которого сумма...

Задан массив. Найти в нем индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от суммы
Здравствуйте, помогите пожалуйста довести код до ума. Условие такое: Задан массив, состоящий из 50...

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

18
Эксперт по компьютерным сетям
5898 / 3355 / 1035
Регистрация: 03.11.2009
Сообщений: 10,003
16.03.2016, 20:33 2
а что у Вас именно не получается?
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
17.03.2016, 15:47  [ТС] 3
Вообще ничего, даже не знаю с чего начать
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
17.03.2016, 17:33 4
Начинают со считывания данных, потом перебор массива с вычислением суммы и сравнением с заданным значением.
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
18.03.2016, 22:40  [ТС] 5
Мой вариант:
Python
1
2
3
n, k, m=(int(x) for x in input().split())
a=[int(x) for x in input().split()]
print(min(i for i in range(0,m-k-1) if sum(a[i:i+k+1])==int(m)))
Но он не рабочий :c
0
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
19.03.2016, 01:30 6
Цитата Сообщение от OnikS228 Посмотреть сообщение
print(min(i for i in range(0,m-k-1) if sum(a[i:i+k+1])==int(m)))
Python
1
print(min(i for i in range(0,n-k-1) if sum(a[i:i+k+1])==m))
буквочку походу перепутали, вместо m n должно быть поидее говоря.
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.03.2016, 11:29 7
OnikS228, в первой строке можно не использовать генератор, т.к. split уже возвращает список
min будет перебирать до конца списка и в общем случае это не здорово — нужно ведь только одно 1-е значение.Если k достаточно большое то имеет смысл рассчитать сумму элементов сразу от 1-го, а потом при каждой итеррации изменять уже полученную сумму (отнимать a[i-1] и добавлять a[i+k])
Python
3
4
5
6
7
8
9
10
s = sum(a[:i+k+1])
for i in range(n - k - 1):
    if s == m:
        print(i + 1)
        break
    s += (a[i+k+1] - a[i])
else:
    print(0)
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
19.03.2016, 14:27  [ТС] 8
Python
1
2
3
4
5
6
7
8
9
10
n, k, m = (int(x) for x in input().split())
a = [int(x) for x in input().split()]
s = sum(a[:i+k+1])
for i in range(n - k - 1):
    if s == m:
        print(i + 1)
        break
    s += (a[i+k+1] - a[i])
else:
    print(0)
При таком варианте в 3 строке ошибка, что i не найдена
Python
1
2
3
4
5
6
7
8
9
10
n, k, m = (int(x) for x in input().split())
a = [int(x) for x in input().split()]
for i in range(n - k - 1):
    s = sum(a[:i+k+1])
    if s == m:
        print(i + 1)
        break
    s += (a[i+k+1] - a[i])
else:
    print(0)
При таком коде ответ при данных вводных данных получается верный, но тестирующая система при проверке получает неправильные ответы
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
20.03.2016, 16:12  [ТС] 9
АКТУАЛЬНО
0
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
20.03.2016, 17:20 10
Вы в первом своем варианте зря затащили i в строку 3. Первая сумма: s = sum(a[:k+1]). А во втором варианте, сумма постоянно будет увеличиваться за счет прибавления нового члена.

Python
1
2
3
4
5
6
7
8
9
10
n, k, m = (int(x) for x in input().split())
a = [int(x) for x in input().split()]
s = sum(a[:k+1])
for i in range(n - k - 1):
    if s == m:
        print(i + 1)
        break
    s += (a[i+k+1] - a[i])
else:
    print(0)
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
20.03.2016, 17:28  [ТС] 11
теперь стали все правильными, кроме одного(
0
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
20.03.2016, 18:02 12
в строке 4 не до конца проходит цикл, там должно быть range(n - k)

Python
1
2
3
4
5
6
7
8
9
10
n, k, m = (int(x) for x in input().split())
a = [int(x) for x in input().split()]
s = sum(a[:k+1])
for i in range(n - k):
    if s == m:
        print(i + 1)
        break
    s += (a[i+k+1] - a[i])
else:
    print(0)
0
3 / 2 / 0
Регистрация: 23.01.2016
Сообщений: 98
20.03.2016, 18:18  [ТС] 13
Хах, теперь ещё меньше правильных

Добавлено через 7 минут
Но теперь не "неправильный ответ", а "ошибка во время исполнения программы"
0
39 / 39 / 25
Регистрация: 25.10.2015
Сообщений: 102
20.03.2016, 18:24 14
ну ищите "мелочи" в оформлении, идея Marinero стопудово классная
попробуйте сместить print(0) в for

Python
1
2
3
4
5
6
7
8
9
10
11
n, k, m = (int(x) for x in input().split())
a = [int(x) for x in input().split()]
s = sum(a[:k+1])
for i in range(n - k):
    if s == m:
        print(i + 1)
        break
    elif i == n - k - 1:
        print(0)
    else:
        s += (a[i+k+1] - a[i])
0
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,069
21.03.2016, 17:33 15
OnikS228, в первой строке можно не использовать генератор, т.к. split уже возвращает список.
так то оно так но список то строк тип str возвращает а нам в решении числа нужны тип int и потом их преобразовывать в int лишние движения.так что генератор оправдан сразу получаем числа

Добавлено через 3 часа 1 минуту
этот код вообще ни о чем. что вы пытаетесь найти?
Python
1
2
3
4
5
s = sum(a[:k+1])
for i in range(n - k):
    if s == m:
        print(i + 1)
        break
задали значение s вне цикла и теперь пытаетесь в цикле его сравнить с m? так всегда будет falhe если случайно по совпадению сумма первых к элементов будет равна м так тогда и весь цикл
Python
1
2
for i in range(n - k):
    if s == m
будет истина и вы получите первую i+1
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
22.03.2016, 12:23 16
Цитата Сообщение от Marinero Посмотреть сообщение
s = sum(a[:i+k+1])
Конечно же
Python
3
s = sum(a[:k+1])
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
задали значение s вне цикла и теперь пытаетесь в цикле его сравнить с m?
С какой радости Вы выбросили строку из кода и делаете выводы?
Python
8
s += (a[i+k+1] - a[i])
0
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,069
22.03.2016, 14:50 17
пардон. не досмотрел.хотя при данных 4 2 22 9 13 10 -11 а так же 4 3 22 9 13 10 -11 результат 0 хотя 13+10+(-11) и есть 22 тут уж и два подряд идущих и три проверял.может что то недопонимаю в условии???
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
22.03.2016, 17:01 18
Semen-Semenich, когда это 13 + 10 = 23 - 11 = 12 стало равно 22?
0
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,069
22.03.2016, 17:20 19
прошу простить и понять сонный еще был((
0
22.03.2016, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2016, 17:20
Помогаю со студенческими работами здесь

Массив: Найти индекс элемента, для которого сумма элементов, стоящих до него наименее отличается от суммы элементов, стоящих после.
Задан массив неотрицательных чисел. Найти в нём индекс элемента для которого сумма элементов,...

Найти в массиве индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от суммы элементов, стоящих после него
Всем доброго времени суток) Помогите плиз с задачкой, что-то ничего не выходит, задание такое: ...

Найти индекс элементов, сумма которых равна заданному числу
привет всем!!! есть одномерный массив типа integer. найти и вывести индексы двух элементов,...

Найти первый столбец матрницы, сумма элементов которого равна сумме элементов первой строки
Дана матрица А. Найти первый столбец, сумма элементов которого равна сумме элементов первой строки.

Найти сумму элементов матрицы, сумма индексов которых равна заданной константе
2. Составить программу суммирования элементов двумерного массива, сумма индексов которых равна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru