สมมติว่าเราต้องการแจกขนมจำนวนหนึ่งให้คน 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]