【问题标题】:How to print a sequence stacked in a "pyramid" with alternating sort?如何使用交替排序打印堆叠在“金字塔”中的序列?
【发布时间】:2018-10-17 07:38:57
【问题描述】:

我想在金字塔中打印以下整数序列(奇数行升序排序,偶数行降序排序)。如果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 python-3.x printing range sequence


    【解决方案1】:

    您需要某种方式来跟踪您在打印每一行时在序列中的位置,生成整个序列,然后将其分块成行,或者......(可能的方法列表不胜枚举)。

    下面是一个相当简单的方法,它只跟踪范围起始值,根据行号计算范围终止值,并反转偶数行。

    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
    

    【讨论】:

      【解决方案2】:

      使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-23
        • 2015-09-17
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多