2017-02-15 28 views
-1

Я пытаюсь понять, что не так с моим текущим решением. Проблема заключается в следующем:.отладка кода: 'взять список int между 0-9, вернуть наибольшее число, делящееся на 3'

с помощью питона 2.7.6"

Вы L, список, содержащий некоторые цифры (от 0 до 9) Написать функцию answer(L), которая находит наибольшее число, которое может быть сделано из некоторые или все эти цифры и делится на 3. Если невозможно сделать такое число, в качестве ответа верните 0. L будет содержать от 1 до 9 цифр. Одна и та же цифра может появляться несколько раз в списке, но каждый элемент в списке может использоваться только один раз.

input: (int list) l = [3, 1, 4, 1] 
output: (int) 4311 
input (int list) l = [3 ,1 ,4 ,1 ,5, 9] 
output: (int) = 94311 

Это мой код, чтобы решить эту проблему:

import itertools 

def answer(l): 
    '#remove the zeros to speed combinatorial analysis:' 
    zero_count = l.count(0) 
    for i in range(l.count(0)): 
     l.pop(l.index(0)) 

    ' # to check if a number is divisible by three, check if the sum ' 
    ' # of the individual integers that make up the number is divisible ' 
    ' # by three. (e.g. 431: 4+3+1 = 8, 8 % 3 != 0, thus 431 % 3 != 0)' 
    b = len(l) 
    while b > 0: 
     combo = itertools.combinations(l, b) 
     for thing in combo: 

      '# if number is divisible by 3, reverse sort it and tack on zeros left behind' 

      if sum(thing) % 3 == 0: 
       thing = sorted(thing, reverse = True) 
       max_div_3 = '' 
       for digit in thing: 
        max_div_3 += str(digit) 
       max_div_3 += '0'* zero_count 
       return int(max_div_3) 
     b -= 1 

    return int(0) 

Я испытал это назначение много раз в моей песочнице, и это всегда работает. Однако, когда я представил его против моего инструктора, я в конечном итоге всегда терпеть неудачу в 1 случае .. без объяснения причин. Я не могу допросить тесты инструктора, они слепо разбиты против кода.

Есть ли у кого-нибудь представление о состоянии, при котором мой код не может либо вернуть наибольшее целое число, делящееся на 3, либо, если его не существует, 0? В списке всегда есть хотя бы одно число.

ответ

0

Оказалось, что проблема была с порядком itertools.combinations (l, b) и отсортирована (вещь, reverse = True). Исходный код находил первое совпадение n% 3 == 0, но не обязательно самое большое совпадение. Выполнение сортировки до того, как itertools.combinations позволили itertools найти наибольший n% 3 == 0.

 Смежные вопросы

  • Нет связанных вопросов^_^