Как найти максимальную сумму не кратную 5

uapev

uapev

Вопрос по математике:

Какая из данных сумм не кратно 5?
1)131+6843 2)93+457
3) 3904+6816 4) 28+307+435

Трудности с пониманием предмета? Готовишься к экзаменам, ОГЭ или ЕГЭ?

Воспользуйся формой подбора репетитора и занимайся онлайн. Пробный урок — бесплатно!

Ответы и объяснения 2

jaire457

jaire457

131+6843 не кратно 5 

qusop95

qusop95

Кратны 5 будут те суммы, которые заканчиваются на 0 или 5
не решая весь пример , складываем только последние цифры чисел и получаем 1) пример будет не кратен 5

Знаете ответ? Поделитесь им!

Гость

Гость ?

Как написать хороший ответ?

Как написать хороший ответ?

Чтобы добавить хороший ответ необходимо:

  • Отвечать достоверно на те вопросы, на которые знаете
    правильный ответ;
  • Писать подробно, чтобы ответ был исчерпывающий и не
    побуждал на дополнительные вопросы к нему;
  • Писать без грамматических, орфографических и
    пунктуационных ошибок.

Этого делать не стоит:

  • Копировать ответы со сторонних ресурсов. Хорошо ценятся
    уникальные и личные объяснения;
  • Отвечать не по сути: «Подумай сам(а)», «Легкотня», «Не
    знаю» и так далее;
  • Использовать мат — это неуважительно по отношению к
    пользователям;
  • Писать в ВЕРХНЕМ РЕГИСТРЕ.

Есть сомнения?

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

Трудности с домашними заданиями? Не стесняйтесь попросить о помощи —
смело задавайте вопросы!

Математика — наука о структурах, порядке и отношениях, исторически сложившаяся на основе операций подсчёта, измерения и описания формы объектов.

Задача, на самом деле, не совсем логична. Ведь, давайте представим такой массив:

 int a[16] = {-6,2,5,1,0,3,4,5,8,8,10,9,11,23,14,25};

Ведь его можно разделить всего на две части: первые два числа и все остальное. При чем все остальное — есть непрерывная последовательность, сумма элементов которой больше суммы первой подгруппы. Так можно делать с каждым массивом: тупо бить его на две или три части последовательно. Подумайте сами. Задача либо требует уточнений( например, максимальное количество элементов в последовательности ), либо не верна.


К примеру, я придумал такой алгоритм( Работа алгоритма производится за линейное время. Это придает алгоритму краткость и понятность. ):

(Алгоритм основан на том, что каждое отрицательное значение дает минус в сумме подгруппы )

int sums[16] = {0};
int a[16] = {-6,1,-2,0,1,1,-17,1,0,1,-100,1,1,-1,-1,1};
int n = 0;
for(int i = 0;i<16;i++)
{
    if(a[i]>=0)
    for(int j=n;j<=i;j++) sums[j]+=a[i];
    else n=i;
}
int max = 0; int ind = 0;
for(int j=0;j<16;j++)
{
    cout<<sums[j]<<endl;
    if(sums[j]>max) {max = sums[j]; ind=j;} 
}

cout<<"The longest subarray in array begins in "<<ind+1<<" position! Sum  =  "<<max<<endl;

Задачка была следующая — дан массив длинной до 200, 000 элементов, элементами которого являются целые числа в диапазоне [-10000, 10000].
Нужно найти максимальную сумму, которую можно получить сложением произвольной неразрывной последовательности элементов этого массива.
Типа для входных данных [2,-2,-5,2,2,-1,2,-3] будет 5 — сумма подмассива [2,2,-1,2]

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

Как бы вы стали решать эту задачу?
В условии также есть ограничение по времени выполнения алгоритма — не более 2-х секунд в их интерпретаторе.

В заданиях, где встречается фраза «…Программа получает на вход количество чисел в последовательности…» 
для ввода самих чисел и проверки на соответствие условию удобно использовать оператор for … to … do begin …end;


В заданиях, где встречается фраза «…последовательность чисел заканчивается числом 0 (0 – признак окончания ввода, не входит в последовательность)…» 
для ввода самих чисел и проверки на соответствие условию удобно использовать оператор while … do begin …end;
В этом случае число вводят с клавиатуры два раза до цикла, потом в цикле идет проверка условий и снова ввод следующего числа

Задача 1

Напишите программу, которая в последовательности натуральных чисел определяет
максимальное число, кратное 5. Программа получает на вход количество чисел в
последовательности, а затем сами числа. В последовательности всегда имеется
число, кратное 5. Количество чисел не превышает 1000. Введённые числа не превышают
30 000. Программа должна вывести одно число – максимальное число, кратное 5.

Пример работы программы:

Входные данные

Выходные данные

3

10

25

12

25

Пояснение: в данной программе будем использовать переменные — переменная цикла, n — количество чисел в последовательности, a — вводимое число, max — для хранения найденного числа
Мы ищем максимальное число, поэтому начальное значение max:=0
Условия отбора: кратность 5  (a mod 5=0) и наибольшее (a>max)

Текст программы

var i, n, a, max: integer; /объявление переменных

begin

max:=0; /начальное значение max

readln(n); /ввод количества чисел в последовательности

for i:=1 to n do /цикл 

begin

readln(a); /ввод числа

if (a mod 5=0) and (a>max) then max:=a; /проверка условия и нахождение max

end;

writeln(max); /вывод найденного максимального кратного 5

Задача 2

Напишите программу, которая в последовательности натуральных чисел определяет
сумму чисел, кратных 6. Программа получает на вход количество чисел в
последовательности, а затем сами числа. В последовательности всегда имеется число,
кратное 6. Количество чисел не превышает 100. Введённые числа не превышают 300.
Программа должна вывести одно число – сумму чисел, кратных 6.

Пример работы программы:

Входные данные

Выходные данные

3

12

25

6

18

Пояснение: в данной программе будем использовать переменные n — количество чисел в последовательности, s — для хранения найденной суммы, — переменная цикла, g — вводимое число. 
Мы ищем сумму, поэтому начальное значение s:=0
Условие отбора кратность 6  (g mod 6=0)

Текст программы

var n, s, k, g:
integer; 
/объявление переменных

begin

s:=0; /начальное значение суммы чисел

readln(n); /ввод количества чисел в последовательности

for k:=1 to n do /цикл

begin

readln(g); /ввод числа

if (g mod 6=0) then s:=s+g/проверка условия и нахождение суммы

end;

writeln(s); /вывод суммы чисел кратных 6

Задача 3

Напишите программу, которая в последовательности натуральных чисел определяет
количество чисел, кратных 4. Программа получает на вход количество чисел в
последовательности, а затем сами числа. В последовательности всегда имеется
число, кратное 4. Количество чисел не превышает 1000. Введённые числа не превышают
30 000. Программа должна вывести одно число – количество чисел, кратных 4.

Пример работы программы:

Входные данные

Выходные данные

3

16

26

24

2

Пояснение: в данной программе будем использовать переменные n — количество чисел в последовательности, s — для хранения количества чисел кратных 4, — переменная цикла, g — вводимое число. 
Мы ищем количество, поэтому начальное значение s:=0
Условие отбора кратность 4  (g mod 4=0)

Текст программы

var n, s, k, g:
integer; 
/объявление переменных

begin

s:=0; /начальное значение количества чисел кратных 4

readln(n); /ввод количества чисел в последовательности

for k:=1 to n do /цикл

begin

readln(g); /ввод числа

if (g mod 4=0) then s:=s+1/проверка условия и нахождение количества

end;

writeln(s); /вывод количества чисел кратных 4

Задача 4

Напишите программу, которая в последовательности натуральных чисел определяет
количество чисел, оканчивающихся на 3. Программа получает на вход количество
чисел в последовательности, а затем сами числа. В последовательности всегда имеется
число, оканчивающееся на 3. Количество чисел не превышает 1000. Введённые числа
не превышают 30 000. Программа должна вывести одно число – количество чисел,
оканчивающихся на 3.

Пример работы программы:

Входные данные

Выходные данные

3

13

23

24

2

Пояснение: в данной программе будем использовать переменные n — количество чисел в последовательности, s — для хранения количества чисел оканчивающихся на 3, — переменная цикла, a — вводимое число. 
Мы ищем количество, поэтому начальное значение s:=0
Условие число оканчивается на 3  (a mod 10=3)

Текст программы

var n, s, k, a:
integer; 
/объявление переменных

begin

s:=0; /начальное значение количества чисел оканчивающихся на 3

readln(n); /ввод количества чисел в последовательности

for k:=1 to n do /цикл

begin

readln(a); /ввод числа

if (a mod 10=3) then s:=s+1/проверка условия и нахождение количества

end;

writeln(s); /вывод количества чисел оканчивающихся на 3

Задача 5
Напишите программу, которая в последовательности натуральных чисел определяет минимальное чётное число, оканчивающиеся на 8. Программа получает на вход количество чисел в последовательности, а затем сами числа. В последовательности всегда имеется чётное число оканчивающиеся на 8. Количество чисел не превышает 1000. Введённые числа не превышают 30 000. Программа должна вывести одно число — минимальное чётное число, оканчивающиеся на 8.
Пример работы программы:

Пояснение: в данной программе будем использовать переменные n — количество чисел в последовательности, i — переменная цикла, min — для хранения минимального четного числа оканчивающихся на 8,  a — вводимое число. 
Мы ищем минимальное, поэтому начальное значение min:=30001 (самое большое число)
Условия: четность (a mod 2=0), окончание на 8  (a mod 10=8), минимальное (a<min)

Текст программы
var n,i,a,min: integer; /объявление переменных
begin
readln(n);/ввод количества чисел в последовательности
min:=30001; /начальное значение минимального
for i:=1 to n do /цикл
begin
readln(a); /ввод числа
if (a mod 2=0) adn (a mod 10=8) and (a<min) then min:=a; /проверка условий
end;
writeln(min) /вывод минимального четного, оканчивающегося на 8
end.



Задача 6

Напишите программу, которая в последовательности натуральных чисел определяет
определяет сумму всех чисел, кратных 6 и оканчивающихся на 4. Программа получает
на вход натуральные числа, количество введённых чисел неизвестно, последовательность
чисел заканчивается числом 0 (0 – признак окончания ввода, не входит в
последовательность). Количество чисел не превышает 1000. Введённые числа не превышают
30 000. Программа должна вывести одно число: сумму всех чисел, кратных 6 и оканчивающихся
на 4.

Пример работы программы:

Входные данные

Выходные данные

14

24

144

22

12

0

168

Пояснение: в данной программе будем использовать переменные — вводимое числоs — для хранения суммы чисел кратных 6 и оканчивающихся на 4.
Мы ищем сумму, поэтому начальное значение s:=0
Условия: кратность 6 (a mod 6=0), число оканчивается на 4 (a mod 10=4)

Текст программы

var a, s: integer; /объявление переменных

begin

s:=0; /начальное значение суммы

readln(a); /ввод числа

while a<>0 do begin /оператор цикла пока а не равно 0

if (a mod 6=0) and (a mod 10=4) then s:=s+a/проверка условий

readln(a); /ввод числа

end;

writeln(s); /вывод суммы чисел кратных 6 и оканчивающихся на 4

Задача 7

Напишите программу, которая в последовательности целых чисел определяет
количество нечётных чисел, кратных 3. Программа получает на вход целые числа,
количество введённых чисел неизвестно, последовательность чисел заканчивается
числом 0 (0 – признак окончания ввода, не входит в последовательность). Количество
чисел не превышает 1000. Введённые числа по модулю не превышают 30 000. Программа
должна вывести два числа: длину последовательности (завершающий 0 не
учитывается) и количество нечётных чисел, кратных 3.

Пример работы программы:

Пояснение: в данной программе будем использовать переменные — вводимое число, k — для хранения количества нечетных чисел кратных 3, n длина последовательности (количество чисел введенных с клавиатуры не считая последний 0).
Мы ищем количество, поэтому начальное значение k:=0 и n:=0.
Условия: нечетность (a mod 2 <>0), кратность 3 (a mod 3=0)

Текст программы

var k, a, n:
integer; 
/объявление переменных
begin

n:=0; /начальное значение счетчика чисел в последовательности

k:=0; /начальное значение количества чисел удовлетворяющих условию отбора

readln(a); /ввод числа

while a<>0 do /оператор цикла пока а не равно 0
begin

n:=n+1; /подсчет количества чисел в последовательности

if (a mod 2<>0) and (a mod 3=0) then k:=k+1; /проверка условия

readln(a); /ввод числа

end;

writeln(n); /вывод количества чисел в последовательности
writeln(k); /вывод количества нечетных чисел кратных 3

Задача 8

Напишите программу, которая в последовательности натуральных чисел определяет
количество всех чётных чисел, кратных 5. Программа получает на вход натуральные
числа, количество введённых чисел неизвестно, последовательность чисел заканчивается
числом 0 (0 – признак окончания ввода, не входит в последовательность). Количество
чисел не превышает 1000. Введённые числа не превышают 30 000. Программа должна
вывести одно число: количество всех чётных чисел, кратных 5.

Пример работы программы:

Пояснение: в данной программе будем использовать переменные — вводимое числоs — для хранения количества четных чисел кратных 5.
Мы ищем количество, поэтому начальное значение s:=0
Условия: четное число, кратное 5 это число оканчивается на 0 (a mod 10=0)

Текст программы

var a, s: integer; /объявление переменных

begin 
s:=0; /начальное значение количества

readln(a); /ввод числа

while a<>0 do /оператор цикла пока а не равно 0

begin

if a mod 10=0 then s:=s+1/проверка условия

readln(a); /ввод числа

end;

writeln(s) /вывод количества четных чисел кратных 5

Задача 9

Напишите программу, которая в последовательности натуральных чисел определяет
сумму всех чисел, кратных 7 и оканчивающихся на 2. Программа получает на вход
натуральные числа, количество введённых чисел неизвестно, последовательность
чисел заканчивается числом 0 (0 – признак окончания ввода, не входит в
последовательность). Количество чисел не превышает 1000. Введённые числа не превышают
30 000. Программа должна вывести одно число: сумму всех чисел, кратных 7 и оканчивающихся
на 2.

Пример работы программы:

Входные данные

Выходные данные

112

24

42

49

22

0

154

Текст программы

var a, s: integer;

begin

s:=0;

readln(a);

while a<>0 do

begin

if (a mod 7=0) and (a mod 10=2) then s:=s+a;

readln(a);

end;

writeln(s);

Перейти к содержанию

Наибольшая сумма, кратная трем

На чтение 1 мин. Просмотров 8 Опубликовано 08.11.2022

Дан массив целых чисел nums, необходимо найти максимально возможную сумму элементов массива, кратную трем.

Пример 1:

Вход: nums = [3,6,5,1,8].
Выход: 18
Пояснения: Выберите числа 3, 6, 1 и 8, их сумма равна 18 (максимальная сумма, кратная 3).

Пример 2:

Вход: nums = [4]
Выход: 0
Пояснение: Поскольку 4 не делится на 3, не выбирайте никакое число.

Пример 3:

Вход: nums = [1,2,3,4,4].
Выход: 12
Пояснения: Выберите числа 1, 3, 4 и 4, сумма которых равна 12 (максимальная сумма, кратная 3).

Ограничения:

  • 1 <= nums.length <= 4 * 10^4
  • 1 <= nums[i] <= 10^4

РЕШЕНИЕ:

import bisect

class Solution:
    def maxSumDivThree(self, nums: List[int]) -> int:
        msum = 0
        n = len(nums)
        total = sum(nums)
        if total % 3 == 0:
            return total
        nums.sort()
        paths = [(nums[i], i) for i in range(n)]
        i = 0
        while i < len(paths):
            currsum, curr = paths[i]
            if (total - currsum) % 3 == 0:
                return total - currsum
            for j in range(curr + 1, n):
                bisect.insort(paths, (currsum + nums[j], j))
            i += 1
        return 0

Войдите в полноэкранный режим Выйти из полноэкранного режима

Понравилась статья? Поделить с друзьями:
  • Как найти бухгалтера в гомеле
  • Как составить композиционную схему рассказа
  • Как найти длину ломаной 3 класс звена
  • Как нас найти страховая компания
  • Экран на компьютере перевернулся на 90 градусов как исправить