Как напечатать последовательность, сложенную в «пирамиду» с чередованием сортировки? - PullRequest
0 голосов
/ 17 октября 2018

Я хочу напечатать следующую последовательность целых чисел в пирамиде (нечетные строки отсортированы по возрастанию, четные строки отсортированы по убыванию).Если 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

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Используя 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 голосов
/ 17 октября 2018

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

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...