Условие
Дан массив из n элементов и числа k1 и k2. Необходимо найти сумму элементов массива с k1-го по k2-й.
Формат входных данных
С клавиатуры вводится натуральное число n (n≤100). На следующей строке через пробел вводятся n элементов массива. В последней строке содержатся числа k1 и k2 — номера элементов. Все числа по модулю не превосходят 100.
Формат выходных данных
В качестве ответа выведите единственное число — сумму элементов, удовлетворяющих условию.
Ответы
Ответ дал:
0
Ответ:
PascalABC.NET
begin
ReadSeqInteger('Entery your array: ', ReadInteger('array length: '))
.Where(x -> abs(x) < 100)
.ToList[ReadInteger('Left Border (index): '):ReadInteger('Rigth Border (index + 1): ')]
.Sum.Println;
end.
Объяснение:
BobbyFresnel:
Ясен перец, я же ссылку дал на книгу, там надо было читать внимательно про работу с последовательностями. Чтение и рандомы - источник недетерминированных последовательностей, а их можно использовать только в лднопроходном алгоритме. Поэтому, как правило, генерят случайные и читают в массив. Либо, сохраняют в конце цепочки полученную последовательность в массив.
вот я это решение как раз из книги и вычитал)
Не надо, в книге все задачи работают.
Нет, в смысле вот этот огород, который я по итогу нагородил. Который работает
Потому что я был одним из тестировщиков.
Ну вот теперь посмотри мое решение, может будет понятно, как без огорода.
ну я просто изначально начал в последовательность читать, а не в массив) Кстати, на счёт твоего, а если ввести левую границу среза 0, не будет ошибки? Типа Array[-1:2] например
Будет. Вообще, можно придумать десятки способов нагадить в программе. Но когда программу пишут в учебных целях, как бы "школьники", предполагается что вводимые данные корректны.
Если хочется себя обезопасить, можно сделать две вещи. Перавя тут и самая простоя - использовать "безопасный" срез, который просто не выпустит индексы за границы массива. Надо после имени массива добавить знак вопроса: a?[k1 - 1:k2].Sum.Println
Вторая - использовать новинку последних версий. Надо записать k1 := a.Clamp(1, n): k2 := a.Clamp(1, n); При выходе за границу величина будет приведена к границе.
Ответ дал:
0
===== PascalABC.NET =====
begin
var n := ReadInteger;
var a := ReadArrInteger(n);
var (k1, k2) := ReadInteger2;
a[k1 - 1:k2].Sum.Println
end.
Приложения:
Вас заинтересует
1 год назад
1 год назад
3 года назад
3 года назад
8 лет назад