你有L,一个包含一些数字(0到9)的列表。写一个函数解(L),它可以从这些数字中的一些或所有数字中找出可以被3整除的最大数
如果无法生成这样的数字,请返回0作为解决方案。L将包含1到9位数字。同一数字可能在列表中出现多次,但列表中的每个元素只能使用一次
输入: 解决方案。解决方案([3,1,4,1]) 输出: 4311
输入: 解决方案。解决方案([3,1,4,1,5,9]) 输出: 94311
def sum(L):
totalSum = 0
for x in range(len(L)):
totalSum = totalSum + L[x]
return totalSum
def listToInteger(L):
strings = [str(integer) for integer in L ]
concatString = "".join(strings)
finalInt = int(concatString)
return finalInt
def solution(L):
num = sum(L)
if not num % 3:
L.sort(reverse=True) # sort list in descending order to create largest number
return listToInteger(L)
else:
n = num % 3
flag = False
while not flag: # locate digit causing indivisiblity
if n in L:
L.remove(n)
L.sort(reverse=True)
return listToInteger(L)
elif(n > num):
return 0
else:
n += 3
我得到了两个正确的测试用例,但是有一个隐藏的用例一直失败。我不确定输入是否不够严格,或者我的逻辑是否有错误
我能想到的逻辑中唯一的错误是,如果输入是[8,5,3],那么总和是16,16%3=1
所以它会检查列表中的1,4,7,10,13,16,但它不在列表中,所以它不会删除8或5。它将在实际返回[3]时返回0
我为此添加了一个函数,但即使如此,它仍然未能通过隐藏的测试用例
如有任何建议,将不胜感激
您的代码似乎假定只有一个数字是错误的。您将如何处理像
1,1,3
这样的输入?求和为5,n为2,您将尝试删除2,5,然后失败并返回0您需要更改您的假设并检查其他数字,并且在制定解决方案时可以删除1个以上的数字
此代码在[8,5,3]中运行良好
示例:[8,5,3,6]
总数是22
总和%3将是1
所以需要签入列表才能删除的数字是1,4,7,10,13,16,19,22,它永远不会删除任何元素,因为列表中没有这些元素
所以仍然有6和3可以是3的倍数
所以,在一个列表中取3和6,并对它们进行排序,答案是63
相关问题 更多 >
编程相关推荐