समस्या विवरण
मान लीजिए हम दूसरे खिलाड़ी के साथ निम गेम नामक गेम खेल रहे हैं। पत्थरों का एक ढेर है, प्रत्येक बार एक खिलाड़ी बारी-बारी से 1 से 3 पत्थर हटाता है। जो अंतिम पत्थर हटाता है वह विजेता होता है। खिलाड़ी 1 पत्थर हटाने की पहली बारी लेगा। दोनों खिलाड़ी बहुत चालाक हैं और खेल के लिए इष्टतम रणनीतियां रखते हैं। हमें ढेर में पत्थरों की संख्या दी गई है, यह निर्धारित करने के लिए एक एल्गोरिदम तैयार करना है कि क्या खिलाड़ी 1 खेल जीत सकता है।
उदाहरण
यदि इनपुट है: 5, तो आउटपुट होगा true, क्योंकि 5 पत्थर हैं, इसलिए शुरुआत में, यदि खिलाड़ी 1 एक पत्थर लेता है, तो दूसरा खिलाड़ी 1 से 3 पत्थर ले सकता है, खिलाड़ी 2 की बारी के बाद कम से कम एक पत्थर बचेगा, इसलिए खिलाड़ी 1 जीत सकता है।
हल करने का दृष्टिकोण
इसे एक सरल चरण का उपयोग करके हल किया जा सकता है:
- यदि n % 4 != 0 तो true लौटाएं, अन्यथा false
C++ कार्यान्वयन
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool canWinNim(int n) {
return n % 4 != 0;
}
};
int main() {
Solution ob;
cout << (ob.canWinNim(5));
return 0;
}
इनपुट
5
आउटपुट
1