Решение проблемного вопроса в Python, чтобы распределить количество пунктов между командой. - PullRequest
0 голосов
/ 06 мая 2020

Недавно я наткнулся на вопрос о решении проблемы в онлайн-платформе кодирования.

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

Есть 4 ключевых правила, которым вы должны следовать, чтобы избежать восстания:

1. The most junior employee (with the least seniority) gets exactly 1 chocolate.  (There will always be at least 1 employee on a team.)
2. An employee will revolt if the person who ranks immediately above them gets more than double the number of chocolates as they do.
3. An employee will revolt if the amount of chocolates given to their next two subordinates combined is more than the number of chocolates they get.  (Note that the two most junior employees won't have two subordinates, so this rule doesn't apply to them.  The 2nd most junior employee would require at least as many chocolates as the most junior employee.)
4. You can always find more employees to pay - the Manager has plenty of employees.  If there is enough chocolate leftover such that another employee could be added as the most senior while obeying the other rules, you must always add and pay that employee.

Обратите внимание, что вы не сможете раздать все конфеты. Отдельный LAMB не может быть разделен. То есть все приспешники должны получить положительное целое число шоколадных конфет.

Напишите функцию с именем solution (total_chocolates), где total_ chocolates - это целое число шоколадных конфет в раздаточном материале, который вы пытаетесь разделить. Он должен возвращать целое число, которое представляет разницу между минимальным и максимальным количеством сотрудников, которые могут делиться шоколадом (то есть быть как можно более щедрыми по отношению к тем, кому вы платите, и максимально скупыми, соответственно), при этом соблюдая все выше правил, чтобы избежать восстания. Например, если у вас было 10 шоколадных конфет и вы были максимально щедрыми, вы могли бы заплатить только 3 сотрудникам (1, 2 и 4 конфеты в порядке возрастания стажа), тогда как если бы вы были максимально скупы, вы могли бы заплатить 4 сотрудники (1, 1, 2 и 3 шоколадки). Следовательно, решение (10) должно возвращать 4-3 = 1.

Чтобы было интересно, Менеджер меняет размеры шоколадных выплат. Вы можете ожидать, что total_chocolates всегда будет положительным целым числом меньше 1 миллиарда (10 ^ 9).

Я пришел к следующему решению:

def solution(total_chocolates):

    if not isinstance(total_chocolates, int) or total_lambs<=1 or total_lambs >= 1000000000: 
        return 0

    else:
        F1=[1,1]
        F2=[1]

        for i in range(1,total_chocolates):

            if sum(F1) < total_chocolates:
                F1.append(F1[-1]+F1[-2])    #fibonacci series from 1
            if sum(F1) > total_chocolates:
                F1.pop()

            LEN_F1 = len(F1)

            if sum(F2) < total_chocolates:
                F2.append(F2[-1] * 2)      #1,2,4,8,16.. series
            if sum(F2) > total_chocolates:
                F2.pop()       

            LEN_F2 = len(F2)


        return (LEN_F1-LEN_F2)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...