ধরুন আমাদের একটি সংখ্যা 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,