Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหา Mountain List เรียงเล็กซิโคกราฟิกมากที่สุดใน Python

ให้ n, lower, upper หา List ความยาว n เพิ่มขึ้นเข้มงวดแล้วลดลงเข้มงวด ค่าอยู่ใน [lower, upper] ทั้งสองส่วนต้องไม่ว่าง หา List เรียงเล็กซิโคกราฟิกมากที่สุด

ตัวอย่าง: n=5, lower=3, upper=7 → [6,7,6,5,4]

[7,6,5,4,3] ไม่ถูก เพราะส่วนเพิ่มว่าง

ขั้นตอน

  1. ถ้า n > 2*(upper-lower)+1: ไม่เป็นไปได้ → []
  2. c = upper - lower
  3. d = 1 ถ้า c < n: d = n - c - 1
  4. สร้างส่วนเพิ่ม: range(upper-d, upper)
  5. สร้างส่วนลด: range(upper, upper-n+d, -1)
  6. รวมทั้งสองส่วน

ตัวอย่างโค้ด

def solve(n, lower, upper):
    if n > 2 * (upper - lower) + 1:
        return []
    c = upper - lower
    d = 1
    if c < n:
        d = n - c - 1
    if d == 0:
        d = 1
    f = list(range(upper - d, upper))
    g = list(range(upper, upper - n + d, -1))
    return f + g

n = 5
lower = 3
upper = 7
print(solve(n, lower, upper))  # Output: [6, 7, 6, 5, 4]

อินพุต

5, 3, 7

เอาต์พุต

[6, 7, 6, 5, 4]