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

โปรแกรมค้นหารายชื่อภูเขาที่ใหญ่ที่สุดในพจนานุกรมศัพท์ภาษา Python


สมมติว่าเรามีตัวเลขบวกสามตัวคือ n ล่าง และบน เราต้องหารายชื่อที่มีความยาวเป็น n และเพิ่มขึ้นเรื่อยๆ แล้วค่อยๆ ลดน้อยลง และตัวเลขทั้งหมดอยู่ในช่วง [ล่างและบน] (รวมทั้งสองอย่าง) และส่วนที่เพิ่มขึ้นและลดลงแต่ละส่วนไม่ควรว่างเปล่า เราต้องหารายการดังกล่าวที่ใหญ่ที่สุดเท่าที่จะเป็นไปได้ หากไม่สามารถทำได้ ให้ส่งคืนรายการว่าง

ดังนั้น หากอินพุตเป็น n =5 ล่าง =3 บน =7 ผลลัพธ์จะเป็น [6, 7, 6, 5, 4] หากเราสังเกตดีๆ ผลลัพธ์จะเป็น [7, 6, 5, 4, 3 ] ไม่ถูกต้องเนื่องจากส่วนที่เพิ่มขึ้นอย่างเคร่งครัดไม่ควรว่างเปล่า

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้า n> 2 * (บน - ล่าง) + 1 แล้ว

    • กลับรายการว่าง

  • c :=บน - ล่าง

  • ง :=1

  • ถ้า c

    • d :=n - c - 1

  • ถ้า d เท่ากับ 0 แล้ว

    • ง :=1

  • f :=รายการใหม่ตั้งแต่ช่วง (บน - d) ถึง (บน - 1)

  • g :=รายการใหม่จากช่วง (บน - n + d - 1) ลงสู่บน

  • เชื่อม f และ g แล้วกลับ

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น

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))

อินพุต

5, 3, 7

ผลลัพธ์

[6, 7, 6, 5, 4]