2017-02-15 6 views
-1

현재 솔루션의 문제점을 이해하려고합니다. 문제는 다음과 같다 :. 파이썬 2.7.6를 사용코드 디버깅 : '0-9 사이의 int 목록 가져 오기, 3으로 나눌 수있는 최대 숫자 반환'

는 "당신은 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을 반환하지 못하는 조건에 대한 아이디어가 있습니까? 목록에는 항상 숫자가 하나 이상 있습니다.

답변

0

itertools.combinations (l, b) 의 순서로 문제가 발생하여 정렬되었습니다 (thing, reverse = True). 원래 코드는 n % 3 == 0의 첫 번째 일치를 찾지 만 반드시 가장 큰 일치는 아닙니다. itertools.combinations 전에 sort를 수행하면 itertools가 가장 큰 n % 3 == 0을 찾을 수있었습니다.