М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
stanislavovichs
stanislavovichs
12.10.2021 23:28 •  Информатика

Дана последовательность чисел (там положительные и отрицательные), которая заканчивается нулём. найти наибольшую сумму чисел из данной последовательности при условии, что сумма должна делиться на 3. паскаль. пример последовательности: 2 5 -2 0 сумма в примере = 3

👇
Ответ:
Noooo123456
Noooo123456
12.10.2021
Будем суммировать все положительные числа, пока не встретится 0. Если полученная сумма сразу делится на 3, то нам повезло. Если нет, надо что-то делать - либо прибавлять отрицательные числа, либо вычитать положительные. Я не буду делать различия между ними - в любом случае надо вычитать модули чисел.
- Если сумма дает остаток 1, то надо вычесть или одно число с остатком 1, или два числа с остатком 2 (вычитать три или более числа нерационально: числа, делящиеся на 3, картину не портят; вычитание трёх чисел с одинаковым остатком не влияет на остаток суммы, а среди трёх чисел с остатком 1 или 2 всегда найдутся два одинаковых).
- Аналогично (с точностью до перестановки 1 и 2) поступаем, если сумма даёт остаток 2.
Если после этих всех ухищрений сумма стала отрицательной, просто выводим 0, как будто мы взяли только последний 0.

Код (PascalABC.NET 3.2)
begin
  var sum := 0;
  var mins := MatrFill(2, 2, MaxInt div 2);
  var temp: integer;
  repeat
    temp := readinteger;
    if temp > 0 then
      sum := sum + temp;
    temp := abs(temp);
    var i := temp mod 3 - 1;
    if i > -1 then
      if temp < mins[i, 0] then
        (mins[i, 0], mins[i, 1]) := (temp, mins[i, 0])
      else if temp < mins[i, 1] then
        mins[i, 1] := temp;
  until temp = 0;
  var i := sum mod 3 - 1;
  if i > -1 then
    sum := max(sum - mins[i, 0], sum - mins.Row((i + 1) mod 2).Sum);
  writeln(max(sum, 0))
end. 
4,5(95 оценок)
Открыть все ответы
Ответ:
kost32rus
kost32rus
12.10.2021

ответ:ответ, проверенный экспертом

4,0/5

128

nelle987

главный мозг

5.1 тыс. ответов

18.3 млн пользователей, получивших

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

Прообразы систем компьютерного перевода появились в начале 1930-х годов, работали такие системы по принципу словарей: на вход механизму подавались специально подготовленные наборы слов, которые переводились машиной, результат интерпретировался человеком, создававшим из него осмысленный текст.

Объяснение:

4,4(48 оценок)
Ответ:
kirilladmiiral
kirilladmiiral
12.10.2021

Элементы списка могут вводиться по одному в строке, в этом случае строку можно считать функцией input(). После этого можно использовать метод строки split, возвращающий список строк, разрезав исходную строку на части по пробелам. Пример:

A = input().split()

Если при запуске этой программы ввести строку 1 2 3, то список A будет равен ['1', '2', '3']. Обратите внимание, что список будет состоять из строк, а не из чисел. Если хочется получить список именно из чисел, то можно затем элементы списка по одному преобразовать в числа:

for i in range(len(A)):

A[i] = int(A[i])

Используя функции языка map и list то же самое можно сделать в одну строку:

A = list(map(int, input().split()))

Объяснений, как работает этот код, пока не будет. Если нужно считать список действительных чисел, то нужно заменить тип int на тип float.

У метода split есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка. Например, метод split('.') вернет список, полученный разрезанием исходной строки по символам '.'.

Используя “обратные” методы можно вывести список при однострочной команды. Для этого используется метод строки join. У этого метода один параметр: список строк. В результате получается строка, полученная соединением элементов списка (которые переданы в качестве параметра) в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод. Например программа

A = ['red', 'green', 'blue']

print(' '.join(A))

print(''.join(A))

print('***'.join(A))

выведет строки 'red green blue', redgreenblue и red***green***blue.

Если же список состоит из чисел, то придется использовать еще и функцию map. То есть вывести элементы списка чисел, разделяя их пробелами, можно так:

print(' '.join(map(str, A)))

4,6(24 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ