1

Задача следующая: нужно сформировать массив целых чисел A[100] в возрастающем порядке множества М, который определяется такими правилами:

1 принадлежит М. Если х принадлежит М, то числа y=2x+1 и z=3x+1 также принадлежат M. Никакое другое число не принадлежит М

Проблема в том, что если решать задачу "в лоб", то последовательность возрастающей не будет: 1, 3, 4, 7, 10, 9, 13... Также нельзя сортировать массив. Есть какие-то идеи, как это сделать максимально эффективно?

  • вам надо последовательные числа множества М или просто возрастающие? во втором случае задача делается в 1 строчку ;-) – Zhihar Nov 15 '20 at 17:10

3 Answers3

1

ну можно решить в лоб -

arr = []
i = 1

while len(arr) < 100: if is_M(i) is True: arr.append(i)

i += 1

т.е. последовательно перебираем все натуральные числа и проверяем - являются ли они членами множества М

ну а проверить число - является ли оно элементом множества гораздо проще, чем находить такие числа - например, надо просто обратно до 1 спуститься

самый простой алгоритм проверки - рекурсивный в лоб с 2 ветками

например, весь код может быть таким:

def is_M(i):
  if i == 1:
    return True

value = i - 1

if value % 2 == 0 and is_M(value // 2) is True: return True

if value % 3 == 0 and is_M(value // 3) is True: return True

return False

arr = [] i = 1

while len(arr) < 100: if is_M(i) is True: arr.append(i)

i += 1

print(arr)

Danis
  • 19,777
  • 6
  • 22
  • 56
Zhihar
  • 37,513
1
Создаёте очередь по приоритетам
Вставляете в неё 1
Пока не набрали нужный результат:
    Извлекли минимум x
    Вставили в очередь 2x+1 и 3x+1
    Добавили x к результату 

MBo
  • 53,555
0

Последовательность будет возрастающей если ррешая в лоб вы не будите добавлять элементы которые не удовлетворяют условию возрастания. По сути вам нужно сравнивать последний полученный с последним добавленным. Ведь в задаче не говориться добавить все полученные. Добавить числа удовлетворяющие условию.

Aziz Umarov
  • 22,567
  • 2
  • 10
  • 33
  • так сортировать же нельзя :))) – Zhihar Nov 15 '20 at 17:15
  • @AzizUmarov у вас какой-то узкий взгляд на сортировки. ваш коммент загуглить даже если, то наверное найдется результат с названием "Сортировка вставками" – teran Nov 15 '20 at 19:33
  • @teran Исправил признаю, ошибся – Aziz Umarov Nov 16 '20 at 02:13