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

โปรแกรมนับจำนวนนักว่ายน้ำที่จะชนะการแข่งขันรอบสุดท้ายใน Python


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums ซึ่งมีความยาวเป็น n องค์ประกอบที่มีอยู่ในรายการนี้แสดงถึงคะแนนปัจจุบันของนักว่ายน้ำในการแข่งขัน สำหรับการแข่งขันรอบสุดท้าย ผู้ชนะอันดับหนึ่งสำหรับรอบปัจจุบันนี้ จะได้รับ n คะแนน ผู้ชนะอันดับที่สองจะได้รับ n-1 คะแนน เป็นต้น เราต้องตรวจสอบจำนวนนักว่ายน้ำที่ยังสามารถชนะการแข่งขันในรอบสุดท้ายหลังรอบปัจจุบัน หากคะแนนเท่ากันจะถือว่าชนะ

ดังนั้น หากอินพุตเป็น nums =[9, 6, 11, 12] ผลลัพธ์จะเป็น 3 เนื่องจากนักว่ายน้ำที่อยู่ในคะแนน 9, 11 และ 12 ในตอนนี้ พวกเขาทั้งหมดสามารถชนะได้หากคะแนนสุดท้ายคือ [13 , 9, 13, 13]. กล่าวคือ นักว่ายน้ำที่ได้คะแนน 9 ได้อันดับหนึ่ง ได้เพิ่ม 4 แต้ม นักว่ายน้ำ 6 แต้ม ได้อันดับสอง ตอนนี้ได้ 9 แต้ม นักว่ายน้ำ 11 แต้มได้สาม คะแนนใหม่คือ 13 และนักว่ายน้ำได้ 12 แต้ม ที่สุดท้ายคะแนนคือ 12 ด้วย แต่ถึงแม้นักว่ายน้ำ 6 แต้มจะได้อันดับหนึ่ง คะแนนสุดท้ายของเขาก็จะเป็น 10 แต้ม นักว่ายน้ำ 9 แต้มจะได้อันดับสอง จากนั้นคะแนนของเขาจะเป็น 12 ไปเรื่อยๆ ก็ไม่มีโอกาสชนะนักว่ายน้ำคนที่สองเช่นกัน

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

  • ถ้า nums ว่างเปล่าก็
    • คืน 0
  • n :=ขนาดของ nums
  • ตอบ :=0
  • เรียงเลขรายการ
  • a :=0
  • สำหรับฉันในช่วง n - 1 ถึง 0, ลดลง 1 ทำ
    • cand :=nums[i] + n - i
    • ถ้าแคน> a แล้ว
      • a :=แคนดี้
  • สำหรับแต่ละ x เป็น nums ทำ
    • ถ้า x + n>=a แล้ว
      • อัน :=ans + 1
  • คืนสินค้า

ตัวอย่าง

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

def solve(nums):
   if not nums:
      return 0
   n = len(nums)
   ans = 0
   nums.sort()
   a = 0
   for i in range(n - 1, -1, -1):
      cand = nums[i] + n - i
      if cand > a:
         a = cand
   for x in nums:
      if x + n >= a:
         ans += 1
   return ans

nums = [9, 6, 11, 12]
print(solve(nums))

อินพุต

[9, 6, 11, 12]

ผลลัพธ์

3