#python
#python
Вопрос:
Вопрос
У вас есть 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. он вернет 0, когда он действительно должен вернуться [3].
Я добавил функцию для этого, но даже тогда она все еще не выполняла скрытый тестовый пример . . .
Любые предложения будут оценены
Комментарии:
1.
I added a function for this
Пожалуйста, добавьте этот код функции в свой вопрос, чтобы сделать его полным. Вы уже обнаружили проблему в своем коде и пытались ее исправить, но не опубликовали полный код? Тогда трудно ответить.2. У меня простая логика, я думаю, что это может сработать. Код не работает для [8,5,3]. Но должно вернуться 3, попробуйте написать еще одну функцию для поиска всех комбинаций этого вида списков, и вы можете получить при оценке каждого списка …. Пример: [8,5,3] может быть [[8,5],[8,3],[8],[5],[3]] , Когда вы оцениваете, чтобы найти любой вложенный список, сумма может быть кратна 3, поэтому здесь [3] может быть возвращен
Ответ №1:
Похоже, что ваш код предполагает, что может быть только одна неправильная цифра. Что бы вы сделали с таким вводом 1,1,3
? сумма равна 5, n равно 2, и вы попытаетесь удалить 2, 5, а затем потерпите неудачу и вернете 0.
Вам необходимо изменить свои предположения и проверить другие цифры, а также сделать возможным удаление более 1 цифры при работе над решением.
Ответ №2:
Этот код отлично работал для [8,5,3]
пример: [8,5,3,6]
сумма будет равна 22
сумма%3 будет равна 1
таким образом, числа, которые необходимо проверить в списке для удаления, равны 1,4 7,10,13,16,19,22, и он никогда не удалит какие-либо элементы, поскольку в списке этих элементов нет
итак, все еще есть 6 и 3, которые могут быть кратными 3.
итак, возьмите 3 и 6 в списке и отсортируйте их, и ответом будет 63
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):
k=[]
for i in L:
if i%3==0:
k.append(i)
if len(k)!=0:
k.sort(reverse=True)
return listToInteger(k)
else:
return 0
else:
n = 3
l=[8,5,3]
print(solution(l))