Computer >> Máy Tính >  >> Lập trình >> Python

Phân phối kẹo cho mọi người bằng Python

Giả sử chúng ta muốn phân phối một số kẹo cho một hàng n người theo cách sau -

  • Sau đó, chúng tôi chia 1 viên kẹo cho những người đầu tiên, 2 viên kẹo cho những người thứ hai và cứ tiếp tục như vậy cho đến khi chúng tôi chia n viên kẹo cho những người cuối cùng.
  • Sau đó, chúng ta quay trở lại hàng bắt đầu lần nữa, chia n + 1 viên kẹo cho người đầu tiên, n + 2 viên kẹo cho người thứ hai, cứ tiếp tục như vậy cho đến khi chúng ta chia 2 * n viên kẹo cho những người cuối cùng. .

Chúng ta sẽ lặp lại quá trình này cho đến khi hết kẹo. Những người cuối cùng sẽ nhận được tất cả số kẹo còn lại của chúng tôi (không nhất thiết phải nhiều hơn số kẹo trước đó).

Chúng ta phải trả về một mảng đại diện cho sự phân phối cuối cùng của kẹo. Vì vậy, giả sử số kẹo là 7 và n =3, thì kết quả đầu ra sẽ là [2, 2, 3]. Vì vậy, lúc đầu người đầu tiên sẽ nhận được 1. mảng là [1, 0, 0], người thứ hai có 2, sau đó mảng là [1, 2, 0], người thứ ba có 3, sau đó mảng là [1, 2, 3], và cuối cùng một lần nữa nhận được 1, vì vậy mảng là [2, 2, 3]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • res là một mảng gồm n phần tử và điền bằng 0
  • chỉ mục:=0
  • trong khi kẹo> 0
    • res [index mod n]:=res [index mod n] + min kẹo và index + 1
    • candy:=candy - 1
    • index:=index + 1
  • trả lại res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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

Đầu vào

8
3

Đầu ra

[3, 2, 3]