मान लीजिए कि हम कुछ संख्या में कैंडीज को 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]