मान लीजिए कि हम एक दो-खिलाड़ियों का खेल खेल रहे हैं जहाँ n संख्या में कंचे हैं और प्रत्येक राउंड में, एक खिलाड़ी को धनात्मक वर्ग संख्या में कंचे लेने होते हैं। यदि कोई खिलाड़ी उस वर्ग संख्या के कंचों को नहीं ले पाता है, तो वह हार जाता है। इसलिए, संख्या n दी गई है, हमें यह पता लगाना है कि हम गेम जीत सकते हैं या नहीं। हम हमेशा पहली बारी करते हैं और कंचों की इष्टतम संख्या का चयन करते हैं।
तो, अगर इनपुट 14 की तरह है, तो आउटपुट ट्रू होगा। क्योंकि पहली बारी में हम 9 कंचे लेते हैं। यह 5 कंचे छोड़ देता है जिससे दूसरा खिलाड़ी 1 मार्बल को पीछे छोड़ते हुए अधिकतम 4 कंचे ले सकता है। तो, अगले मोड़ में, हम अंतिम मार्बल लेते हैं, जिससे 0 कंचे पीछे रह जाते हैं, विरोधी कोई चाल नहीं चल सकता। इस प्रकार, हम जीतते हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अगर n <=0, तो
- झूठी वापसी
- उत्तर:=असत्य
- i के लिए पूर्णांक भाग ((n) का वर्गमूल) से -1 तक, 1 से घटाएं
- अगर मैं * मैं> n, तो
- लूप से बाहर आएं
- उत्तर:=उत्तर या (नहीं हल (n - i * i))
- यदि उत्तर सत्य है, तो
- वापसी उत्तर
- अगर मैं * मैं> n, तो
- वापसी उत्तर
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
from math import sqrt def solve(n): if n <= 0: return False ans = False for i in range(int(sqrt(n)), 0, -1): if i * i > n: break ans = ans | (not solve(n - i * i)) if ans: return ans return ans print(solve(14))
इनपुट
14
आउटपुट
True