W sumie to wspomniałeś o usunięciu 3, 3, 3. A tego nie usunąłeś ;P.
Przy okazji może wysil się chociaż trochę przy pytaniu żeby coś samemu spróbować napisać, to ci ktoś by chętniej pomógł, doradził gdzie masz błąd oparł by się o twój kod.
Zakładam że te liczby podałeś nie bez powodu jako dwa unikalne rozwiązania. Więc podrzucam ci kod który również rozwiąże problem jak go ująłeś, ale w inny sposób, nie uwzględniając unikalności.
Może ci to pomoże, ale pobaw się sam nad finalnym rozwiązaniem :).
def main():
#Define list and sort for raise values
Num_list = [1, 1, 3, 3, 3, 3, 5, 10, 23, 53];
Num_list.sort()
#Define how many args to arrive number in list.
n = 3; #Your example
#Define number to arrive
to_arrive = 9;
print("Input list:",Num_list);
temp_list = check_combine(Num_list, n, to_arrive);
print("");
while temp_list:
print("Temp list:",Num_list,"\nTo delete:",temp_list);
for i in temp_list:
Num_list.pop(i);
temp_list = check_combine(Num_list, n, to_arrive);
print("Succes");
print("");
print("Output list:",Num_list);
def check_combine(entry_list, combination, result):
find_combinate = [];
temp_check = result;
for j in entry_list[::-i]:
if j <= temp_check:
temp_check -= j;
find_combinate.append(j);
if temp_check < 0:
break
elif temp_check == 0:
if len(find_combinate) == combination:
return find_combinate;
return False
Program oczywiście można zrobić dużo optymalniejszy i znajdujący unikalne, ale to pierwsza działająca wersja którą napisałem po zobaczeniu twojego problemu, nim 'zratyfikowałem'(?) kod. Jakbyś miał duże problemy z tym, to pisz dokładniej co potrzebujesz i spróbuj samemu coś poprawiać, wtedy spróbuję naprowadzić na kolejne możliwości :).