отличница459
26.03.2020 23:23

Дан целочисленный массив из 9 элементов. Элементы массива могут принимать значения от -10000 до 10000. Опишите на одном из языков программирования алгоритм, который находит и выводит наибольшую сумму двух соседних элементов, которая не кратна трём. Если таких пар нет, вывести на экран 0.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.

Python

# кроме уже указанных
# допускается использование
# целочисленных переменных
# k, s, m
a = []
N = 9
for i in range(0, N):
a.append(int(input()))

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Uchenicza
05.04.2020 22:19

1: Объект set не реализует __getitem__, соответственно, доступ к элементам set по индексу невозможен. Приведите set к list для получения доступа к элементу по индексу

2: Функция elem не осуществляет проверку правильности вводимых данных, в следствии чего неверные параметры при вызове функции elem могут поднять исключение IndexError: string/list index out of range.

Пояснения:

Используйте Type Hints для указания принимаемого и возвращаемого типа для функции, а так же добавьте проверку получаемых функцией параметров:

import typing

from typing import List

from typing import Any

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True

   except: return False

elem(list(set('string')), 3)

В предложенном примере кода функция возвращает True или False. в зависимости от результата выполнения. Вы можете добавить декоратор, который будет выводить в консоль сообщение об ошибке вызова без прерывания выполнения программы:

import typing

from typing import List

from typing import Any

from typing import Callable

def Status(func: Callable[[Any], bool]):

   def _wrap(*a, **kw):

       res = func(*a, **kw)

       if not res:

           print('error occurred during call function')

   return _wrap

@Status

def elem(data: List[Any], index: int) -> bool :

   try:

      print(data[index]); return True  

   except: return False

elem(list(set('string')), 3) # -> 'r'

elem(list(set('string')), 32) # -> 'Error occurred during call function'

   

Все примеры кода написаны для языка Python 3.8.3

0,0(0 оценок)
Ответ:
vitaly10
25.04.2023 00:17

В программе есть 3 переменные n=20, a=0 и t (участвует в цикле от 1 до 20).

Запускается цикл (for ..) и в нем будет выполнятся это действие:

if (F(n) >= G(t)) then

a:=a+1;

В функцию F передается постоянно только одна переменная (n = 20)

Можно сразу посчитать чему будет равно значение в этой функции:

F:= 2*(x-7)*(x-7)+7*x+7 = F:= 2*(20-7)*(20-7)+7*20+7 = 485

F(n) = 485 постоянно

Дальше запускаем цикл for (t = от 1 до 20) и каждое значение t передается в функцию G и там производятся вычисления.

Итак

Цикл 1

t = 1

G(t) = G(1) = 3*x*x - 107 = 3*1*1 - 107 = -104

Проверка (if):

(F(n) = 485) >= (G(t) = -104)

так как 485 > -104, то к a прибавляется единица, так как a = 0, то a = 1 (a = a + 1 = 0 + 1 = 1)

a = 1

Цикл 2

t = 2

G(t) = G(1) = 3*x*x - 107 = 3*2*2 - 107 = -95

Проверка (if):

(F(n) = 485) >= (G(t) = --95)

так как 485 > -95, то к a прибавляется единица, так как a = 0, то a = 1 (a = a + 1 = 0 + 1 = 1)

a = 2

И так проделывать пока t не станет равной 20 (в каждом следующем цикле к t прибавлять 1 и в функции G высчитывать по формуле и сравнивать с функцией F)

В итоге a = 14

ответ: a = 14

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота