Как сохранить уникальные элементы в списке, чтобы решить эту проблему?
Мне требуется создать программу, которая обеспечивает решение:
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
переменная.