Как напечатать последовательность, сложенную в «пирамиду» с чередованием сортировки?

1

Я хочу напечатать следующую последовательность целых чисел в пирамиде (нечетные строки отсортированы по возрастанию, четные строки отсортированы по убыванию). Если S=4, он должен напечатать четыре строки и так далее.

Ожидаемый результат:

1
3 2
4 5 6
10 9 8 7

Я попробовал следующий код, но он произвел неверный вывод.

S=int(input())
for i in range(1,S+1):
    y=i+(i-1)
    if i%2!=0:
        print(*range(i,y+1))
    elif i%2==0:
        print(*range(y,i-1,-1))

# Output:
# 1
# 3 2
# 3 4 5
# 7 6 5 4
Теги:
python-3.x
printing
range
sequence

2 ответа

0

Использование itertools.count и просто реверсирование подсписок перед печатью на четных строках

из импорта импорта itertools

s = 4
l = count(1)
for i in range(1, s+1):
    temp = []
    for j in range(i):
        temp.append(next(l))
    if i % 2:
        print(' '.join(map(str, temp)))
    else:
        print(' '.join(map(str, temp[::-1])))
1
3 2
4 5 6
10 9 8 7
0

Вам нужно каким-то образом отслеживать, где вы находитесь в последовательности, когда печатаете каждую строку, генерируете всю последовательность, а затем разбиваете ее на строки или... (список возможных подходов продолжается и продолжается).

Ниже представлен довольно простой подход, который просто отслеживает значение начала диапазона, вычисляет значение остановки диапазона на основе номера строки и меняет даже четные строки.

rows = int(input())
start = 1
for n in range(1, rows + 1):
    stop = int((n * (n + 1)) / 2) + 1
    row = range(start, stop) if n % 2 else reversed(range(start, stop))
    start = stop
    print(*row)

# If rows input is 4, then output:
# 1
# 3 2
# 4 5 6
# 10 9 8 7

Ещё вопросы

Сообщество Overcoder
Наверх
Меню