2016-11-28 4 views
0

私は現在このコードを作成していますが、動作するように思われるのは「ソリューションなし」だけです。また、コードには無限ループがあり、解決方法を理解できないようです。誰かが私の間違いを指摘することができればそれは高く評価されるだろう。Python Greedy Sum

def greedySum(L, s): 

""" input: s, positive integer, what the sum should add up to 
       L, list of unique positive integers sorted in descending order 
     Use the greedy approach where you find the largest multiplier for 
     the largest value in L then for the second largest, and so on to 
     solve the equation s = L[0]*m_0 + L[1]*m_1 + ... + L[n-1]*m_(n-1) 
     return: the sum of the multipliers or "no solution" if greedy approach does 
       not yield a set of multipliers such that the equation sums to 's' 
    """ 

     if len(L) == 0: 
      return "no solution"    
      sum_total = (0,()) 
     elif L[0] > k: 
      sum_total = greed(L[1:], k) 
     else: 
      no_number = L[0] 
      value_included, take = greed(L, k - L[0]) 
      value_included += 1 
      no_value, no_take = greed(L[1:], k) 
      if k >= 0: 
       sum_total = (value_included, take + (no_number,)) 
      else: 
       sum_total = (value_included, take + (no_number,)) 
     return sum_total 
    sum_multiplier = greed(L, s) 
    return "no solution" if sum(sum_multiplier[1]) != s else sum_multiplier[0] 

第二の方法:私はあなたのコードが間違っているかについての詳細なヘルプを提供するであろう

def greedySum(L, s): 
    multiplier_sum = 0 
    for l in L: 
     (quot,rem) = divmod(s,l) # see how many 'l's you can fit in 's' 
     multiplier_sum += quot # add that number to the multiplier_sum 
     s = rem     # update the remaining amount 

    # If at the end and s is 0, return the multiplier_sum 
    # Otherwise, signal that there is no solution 
    return multiplier_sum if s == 0 else "no solution" 

が、それは瞬間Aのである:ここでは

def greedySum(L, s): 
     answer = [] 
    try: 
     while (s >= L[0]): 
     total = s// L[0] 
     s -= (total * L[0]) 
     answer.append(total) 
     L = L[1:] 
    return(str(answer)[1:-1]) 
    except: 
    return("no solution") 
+1

コードが引用符で囲まれています。あなたはそれを修正できますか? –

+0

ありがとうございました。さっき気付いた。コードをもっとシンプルにするなどの修正が必要なことはありますか? –

+0

返品は私が考えていない機能ではありません。後にかっこを入れないでください。 –

答えて

0

が働くものですあなたはそれを変え続ける!

>>> greedySum([4,2],8) 
2 
>>> greedySum([4,2],9) 
'no solution' 
>>> greedySum([4,2,1],9) 
3 
+0

ありがとうございました@Alec。コードが機能しました。 –

+0

@June_Joshuaお手伝いします。あなたが探していたものであれば自由に投票し、同意してください。 – Alec

+0

グラフ理論を含むいくつかの質問もありますが、それはあなたと大丈夫です。 –