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

แจกจ่ายขนมให้กับผู้คนใน Python


สมมติว่าเราต้องการแจกขนมจำนวนหนึ่งให้คน n แถวหนึ่งแถวด้วยวิธีต่อไปนี้ −

  • จากนั้นเราให้ลูกอม 1 อันแก่คนแรก ลูกอม 2 อันกับคนที่สอง และอื่นๆ จนกว่าเราจะให้ลูกอม n อันกับคนสุดท้าย
  • หลังจากนั้นเรากลับไปที่จุดเริ่มต้นของแถวอีกครั้ง ให้ n +1 แคนดี้ กับคนที่สอง n + 2 แคนดี้ ไปเรื่อยๆ จนกว่าเราจะให้ 2 * n แคนดี้กับคนสุดท้าย .

เราจะทำซ้ำขั้นตอนนี้จนกว่าขนมจะหมด คนสุดท้ายจะได้รับลูกอมที่เหลืออยู่ทั้งหมดของเรา (ไม่จำเป็นต้องมากไปกว่าของขวัญก่อนหน้า)

เราต้องส่งคืนอาร์เรย์ที่แสดงถึงการแจกแจงลูกอมขั้นสุดท้าย สมมติว่าแคนดี้เป็น 7 และ n =3 ผลลัพธ์จะเป็น [2, 2, 3] ดังนั้นในตอนแรก คนแรกจะได้ 1 อาร์เรย์คือ [1, 0, 0] อันที่สองได้ 2 จากนั้นอาร์เรย์คือ [1, 2, 0] อาร์เรย์ที่สามได้ 3 แล้วอาร์เรย์คือ [1 2, 3] และในที่สุดตัวแรกก็ได้ 1 อีกครั้ง ดังนั้นอาร์เรย์จึงเป็น [2, 2, 3]

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

  • res คืออาร์เรย์ขององค์ประกอบ n และเติมด้วย 0
  • ดัชนี :=0
  • ในขณะที่ลูกอม> 0
    • res[index mod n] :=res[index mod n] + ขั้นต่ำของแคนดี้และดัชนี + 1
    • แคนดี้ :=แคนดี้ – 1
    • ดัชนี :=ดัชนี + 1
  • ผลตอบแทน

ตัวอย่าง

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

class Solution(object):
   def distributeCandies(self, candies, num_people):
      res = [0 for i in range(num_people)]
      index = 0
      while candies>0:
         res[index%num_people] += min(candies,index+1)
         candies-=(index+1)
         index+=1
      return res
ob1 = Solution()
print(ob1.distributeCandies(8, 3))

อินพุต

8
3

ผลลัพธ์

[3, 2, 3]