मान लीजिए हमारे पास एक संख्या 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,