Как сохранить уникальные элементы в списке, чтобы решить эту проблему?

Мне требуется создать программу, которая обеспечивает решение:

1
3 2
6 5 4
10 9 8 7

используя питон.

Более трех недель я пробовал разные идеи и не могу найти решение. Все функции кода / команды, которые мне разрешено использовать, использовались в следующих попытках.

Различные попытки включают в себя:

Первый фрагмент кода показывает некоторое обещание, но он продолжает получать дубликаты элементов в списке x.

    #Attempt 1
    n=4
    l = [0, 1, 2, 3, 4]
    x = [0]
    for i in range (0, n+1):
        k = 0
        j = i
        while k <= i and j != x[j-1]:
            j += l[k]
            print (j, end = " ")
            x.append(j)
            while j != i and j != x[j-1]:
                j -= 1
                if j > i:
                    print (j, end = " ")
                    x.append(j)
            print (x)
            k+=1

    #Attempt 2
    n = 4 
    print (1)
    for a in range (2, n):
        for i in range (2, n*2, a):
            j = i 
            j+=i-1
            print (j, end =" ")
            while j>i:
                j-=1
                print (j, end= " ")
            print ()

    #Attempt 3
    n = 4
    l = [1, 2, 3, 4]
    for i in range (0, n):
        for j in range (0, n*3, l[i]):
            while j >= i:
                print (j, end = " ")
                j-=1
            print ()

Выход должен быть

1
3 2
6 5 4
10 9 8 7

в той или иной форме, но я никогда не понимаю.

3 ответа

Решение

Ответ от cdlane более питонический. Это упрощенная (школьный проект) версия.

n = 4

for i in range(1, n+1):
  max_num_in_line = i * (i+1)// 2  # this gives max number to be printed in line i
  for j in range(i): # here i is the total numbers to be printed in a line.
    print(max_num_in_line, end=' ')
    max_num_in_line -= 1
  print()

Если вы просто хотите получить конкретный результат, зная только значение nтогда вы можете сделать:

n = 8

numbers = range(1, n * (n + 1) // 2 + 1)

for i in range(1, n + 1):
    head, numbers = numbers[:i], numbers[i:]
    print(*reversed(head))

ВЫХОД

> python3 test.py
1
3 2
6 5 4
10 9 8 7
15 14 13 12 11
21 20 19 18 17 16
28 27 26 25 24 23 22
36 35 34 33 32 31 30 29
> 

Или есть еще проблема, которую я не понимаю?

Если вы не хотите дублировать значения, вы должны использовать set() вместо list() на x переменная.

Другие вопросы по тегам