Великий математик Виталий Евгеньевич каждый Новый год проводит на работе. Коллеги всегда любили и ценили его, поэтому в этом году решили сделать ему сюрприз — украсить кабинет учёного математическими ёлками. Помогите математикам и напишите программу, которая по введённому числу строит математическую ёлку.
Формат ввода
Вводится одно натуральное число — количество чисел в математической ёлке.
Формат вывода:
Требуемая новогодняя ёлка.
Пример
Ввод
14
Вывод
1
2 3
4 5 6
7 8 9 10
11 12 13 14
Ввод
6
Вывод
1
2 3
4 5 6
Решение
Основная сложность – понять как организовать работу внутреннего цикла и прервать его выполнение в нужный момент. Так же зачастую вызывает трудности определение какими типами циклов лучше пользоваться.
Внешний цикл удобнее всего организовать с помощью while. Условием выхода из него будет достижение счетчиком предельного значения. Сам счетчик это число, которое мы будем печатать в елке.
Внутренний цикл будет печатать нужное количество чисел. В первой строке – одно, во второй – два и т.д. В цикле мы будем проверять не достигло ли число предельного значения и если да, прекращать цикл с помощью break.
Несмотря на то, что задача находится в разделе вложенные циклы, она имеет решение без использования вложенных циклов, базирующееся на материалах прошлого раздела. И это решение более лаконично.
Посмотреть код
Решение
# Решение с вложенными циклами
dim = int(input())
count = 1
num = 1
while num <= dim:
for i in range(count):
if num > dim:
break
print(num, end=' ')
num += 1
print()
count += 1
Решение
# Решение с одни циклом
finish = int(input())
limit = 1
current = 0
for pos in range(finish):
current += 1
print(pos + 1, end=' ')
if current == limit:
print()
limit += 1
current = 0
У меня такое получилось, приняло, правда, не понимаю, почему пространство пустоты в прогрессии от введенного числа внизу появляется.
chislo = int(input())
c = ”
levo = 0
pravo = 2
for i in range(1, chislo + 1):
for j in range(1, chislo + 1):
if levo < j < pravo:
if c == ”:
c = ” + str(j)
else:
c = c + ‘ ‘ + str(j)
print(c)
c = ”
pravo = pravo + i + 1
levo = levo + i
все дело в том, что когда вы завершаете строить елку i еще не достигло максимального значения,и это приводит к тому, что у вас крутится вложенный пустой цикл солько раз,сколько чисел было в последней строке.
в этой ситуации выгоднее строить внешний цикл с помощью while.