Я хочу создать функцию (без использования библиотек), которая принимает в качестве входных данных три целых числа (> 0) ( a , b , c ), например:
a = 6
b = 6
c = 3
и возвращает список, содержащий c элементов (поэтому в этом случае возвращаемый список должен содержать 3 элемента), взятый из списка a числа (поэтому в данном случае начальный список [1,2,3,4,5,6]).Элементы c возвращаемого списка должны быть теми, которые удалось сохранить в исходном списке после удаления номера каждые b позиций из списка a элементы до len (return_list) = c .
Так что для a = 6, b = 6 и c = 3 функция должна сделать что-то вроде этого:
1) initial_list = [1,2,3,4,5,6]
2) first_change = [2,3,4,5,6] #the number after the 6th (**b**) is 1 because after the last element you keep counting returning to the first one, so 1 is canceled
3) second_change = [2,4,5,6] #you don't start to count positions from the start but from the first number after the eliminated one, so new number after the 6th is 3 and so 3 is canceled
4) third_change = [2,4,5] #now the number of elements in the list is equal to **c**
Обратите внимание, что если при подсчете вы заканчиваете заканчивать элементы из списка, вы продолжаете подсчет и возвращаетесь к первому элементу списка.
Я сделал эту функцию:
def findNumbers(a,b,c):
count = 0
dictionary = {}
countdown = a
for x in range(1,a+1):
dictionary[x] = True
while countdown > c:
for key,value in dictionary.items():
if value == True:
count += 1
if count == b+1:
dictionary[key] = False
count = 0
countdown -= 1
return [key for key in dictionary.keys() if dictionary[key] == True]
В некоторых случаях это работает, как в приведенном выше примере.Но это не работает каждый раз.Например:
findNumbers(1000,1,5)
возвращает:
[209, 465, 721, 977] #wrong result
вместо:
[209, 465, 721, 849, 977] #right result
и для больших чисел, например:
findNumbers(100000, 200000, 5)
даже для выполнения своей работы требуется слишком много времени, я не знаю, является ли проблема неэффективностью моего алгоритма или потому что в коде есть что-то, что создает проблемы для Python.Я хотел бы знать другой подход к этой ситуации, который мог бы быть более эффективным и способным работать в любой ситуации.Кто-нибудь может дать мне несколько советов / идей?Заранее спасибо за ваше время.И дайте мне знать, если вам нужны дополнительные объяснения и / или примеры.