anayaremenco
24.06.2020 22:36

Относительность времени (тест 2) Эта задача с открытыми тестами. Ее решением является набор ответов, а не программа на языке программирования. Тесты указаны в самом условии, от вас требуется лишь ввести ответы на них в тестирующую систему. В странах А и В считают время по-разному. В одном часе в стране А ровно M1 минут, а в одном дне ровно H1 часов. В стране В в одном часе ровно M2 минуты, а в одном дне ровно H2 часов. Минуты в обеих странах считаются одинаково. В какой-то момент в стране А началась засуха. Правительство этой страны знает, что в стране В засуха длилась ровно K дней (по исчислению страны B), и попросило ученых дать ответ на вопрос: «Как долго продлится засуха в стране А?». По подсчетам ученых, если сравнивать полное количество минут, то засуха в стране А будет дольше в T раз, чем в стране B. Через какое время страна А победит засуху по исчислению страны А? Выходные данные Для каждого теста требуется ввести в тестирующую систему три целых числа через пробел в следующем формате: KK HH MM где: KK - количество дней засухи в стране А по исчислению времени страны А. HH - количество часов засухи в стране А по исчислению времени страны А с учетом того, что уже KK дней. MM - количество минут засухи в стране А по исчислению времени страны А с учетом того, что уже KK дней и HH часов. Примечание Например, если K=5 , M1=7, H1=5, M2=10, H2=10, T=2 , то засуха бы продолжалась 28 дней 2 часа и 6 минут по исчислению времени страны А. ответ выглядел бы следующим образом: 28 2 6 Тест №1: K=1 , H1=1, M1=1, H2=1, M2=1, T=1 ; Тест №2: K=1 , H1=7, M1=2, H2=2, M2=7, T=1 ; Тест №3: K=2 , H1=4, M1=16, H2=8, M2=4, T=4 ; Тест №4: K=41 , H1=82, M1=94, H2=47, M2=8, T=93 ; Тест №5: K=41 , H1=45, M1=82, H2=4, M2=8, T=7 ; Тест №6: K=4 , H1=7, M1=32, H2=9, M2=4, T=4 ; Тест №7: K=40 , H1=16, M1=99, H2=26, M2=69, T=50 ; Тест №8: K=5 , H1=30, M1=29, H2=85, M2=29, T=48 ; Тест №9: K=22 , H1=85, M1=90, H2=86, M2=29, T=19 ; Тест №10: K=2 , H1=52, M1=60, H2=46, M2=76, T=33 . Формат результата Введите в поле три числа, разделенные пробелом - ответы на тест 2. Сдать решение ответ Отправить!

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

Идея такая: разбиваем отрезок [a, b] на два: [a, m] и [m, b], где m = (a + b)/2. Длина такого отрезка h = b - a. Cмотрим значения функции f в точках m - ε и m + ε. Если f(m - ε) < f(m + ε), то думаем, что функция возрастает в точке m, и разумно искать ответ на отрезке [a, m]; если f(m - ε) > f(m + ε), то оставляем отрезок [m, b]. Если нам ОЧЕНЬ не повезло, и f(m - ε) = f(m + ε), то оставим отрезок [m - h/4, m + h/4]. При этом в любом случае длина нового отрезка будет h/2. В качестве ε разумно взять желаемую точность, и останавливаться, если новая длина h/2 окажется меньше ε.

Очень маленький ε ставить не следует, при этом очень большую роль начинаю играть ошибки округления.

Точный ответ можно найти, посчитав производную. Должно получиться 1/\sqrt{3}

Реализация (python 3.7):

from math import sqrt

def find_min(function_to_minimize, left, right, tolerance=1e-6):

   assert left <= right

   # print(left, right) # если хотите проследить за тем, как меняются границы

   length = right - left

   if length <= tolerance:

       return left

   midpoint = (left + right) / 2

   y_left, y_right = function_to_minimize(midpoint - tolerance), function_to_minimize(midpoint + tolerance)

   if y_left < y_right:

       return find_min(function_to_minimize, left, midpoint, tolerance)

   elif y_left > y_right:

       return find_min(function_to_minimize, midpoint, right, tolerance)

   else:

       return find_min(function_to_minimize, midpoint - length / 4, midpoint + length / 4)

calculated = find_min(lambda x: x ** 3 - x, 0, 1)

exact = 1 / sqrt(3)

print(calculated)

print(calculated - exact)

Мне выводится ответ 0.5773496627807617

Разница между точным решением и найденным примерно 6\cdot10^{-7}

0,0(0 оценок)
Ответ:
Mironovа
01.04.2020 16:35

--- Python 3.8.3 ---

import typing

from typing import Callable

from typing import AnyStr

from typing import Any

from typing import Iterable

from typing import List

import random

#DEFINE User-Types

Numeric = typing.TypeVar('Numeric', int, float, complex)

#END

def ListTransform(Data: List[Any], Tranformer: Callable[[Any], Any], Selector: Callable[[Any], bool] = lambda p: True):

   '''Трансформирует элементы list, удовлетворяющие условию, в соответствии с заданным правилом

   По умолчанию трансформирует все элементы'''

   for index, item in enumerate(Data):

       if (Selector(item)):    

           Data[index] = Tranformer(item)

   return Data

def Product(data: Iterable[Numeric]):

   '''Перемножает значения числовой последовательности'''

   p = 1

   for i in data: p *= i

   return p

def main():

   N = int(input('Enter "N":\n'))

   Lst = ListTransform([random.uniform(-99,99) for i in range(N)], lambda p: p + 1, lambda item: item == 0)

   print(*Lst)

   NewList = []

   for index in range(len(Lst)):

       NewList.append(Product(Lst[:index] + Lst[index+1:]))

   print(*NewList)

if __name__ == "__main__":

   main()

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