मान लीजिए कि हमारे पास एक संख्या n है। कुछ बच्चे एक घेरे में खड़े हैं। वे 1 से n तक गिने जाते हैं, वे दक्षिणावर्त क्रम में हैं और बच्चा नंबर 1 गेंद को पकड़े हुए है। पहले बच्चा नंबर 1 गेंद को अगले एक घड़ी की दिशा में फेंकता है, फिर बच्चा नंबर 2 गेंद को अगले लेकिन एक बच्चे को फेंकता है, (बच्चे नंबर 4 को), फिर चौथा बच्चा गेंद को बच्चे नंबर 7 पर फेंकता है और जल्द ही। जब एक गेंद फेंकी जाती है तो वह सर्कल की शुरुआत से गुजर सकती है। खेल के दौरान सभी बच्चों को गेंद नहीं मिलती है। यदि किसी बच्चे को गेंद नहीं मिलती है, तो हमें उन बच्चों की संख्या ज्ञात करनी होगी जिन्हें प्रत्येक थ्रो के बाद गेंद मिलेगी।
इसलिए, यदि इनपुट n =10 जैसा है, तो आउटपुट [2, 4, 7, 1, 6, 2, 9, 7, 6] होगा।
कदम
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
p := 1 for initialize i := 1, when i < n, update (increase i by 1), do: p := p + i p := p mod n if not p is non-zero, then: p := n print p
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; void solve(int n){ int p = 1; for (int i = 1; i < n; i++){ p += i; p %= n; if (!p) p = n; printf("%d, ", p); } } int main(){ int n = 10; solve(n); }
इनपुट
10
आउटपुट
2, 4, 7, 1, 6, 2, 9, 7, 6,