समस्या विवरण
रनों का एक स्कोर दिया गया है। लक्ष्य उस स्कोर तक इस तरह पहुंचना है कि बल्लेबाज एक गेंद पर केवल 1 या 2 रन ले सकता है। प्रतिबंध यह है कि लगातार 2 रन नहीं लिए जा सकते। उदाहरण के लिए, दिए गए स्कोर 6 तक पहुंचने के लिए, कोई 1+2+1+2 जैसे रन ले सकता है लेकिन 2+2+1+1 या लगातार दो 2 वाले किसी अन्य तरीके से नहीं।
उदाहरण
इनपुट
score=4
आउटपुट
तरीकों की संख्या: 4
व्याख्या
स्कोर 4 तक पहुंचने के तरीके: 1+1+1+1, 1+1+2, 1+2+1, 2+1+1
इनपुट
score=5
आउटपुट
तरीकों की संख्या: 6
व्याख्या
स्कोर 5 तक पहुंचने के तरीके: 1+1+1+1+1, 2+1+1+1, 1+2+1+1, 1+1+2+1, 1+1+1+2, 2+1+2
दृष्टिकोण
इस दृष्टिकोण में हम एक फ्लैग का उपयोग करेंगे यह चिह्नित करने के लिए कि पिछला स्कोर 2 था या नहीं, यदि यह 2 था तो हम अगले रन के रूप में 1 से स्कोर को कवर करेंगे अन्यथा 2।
एल्गोरिदम चरण
- एक पूर्णांक चर
scoreलें। - फ्लैग चर
check = falseप्रारंभ में लें। - फंक्शन
ways_reach_score(int score, bool check)1 और 2 का उपयोग करके बिना लगातार 2 के स्कोर तक पहुंचने के तरीकों की संख्या बताता है। - प्रारंभिक गिनती 0 लें।
- यदि स्कोर 0 है तो 0 लौटाएं।
- यदि
checkfalse है मतलब पिछला रन 1 था, तो यदि वर्तमान स्कोर अधिक है तो तरीके होंगेcount = ways_reach_score(score-1, false) + ways_reach_score(score-2, true)। - अन्यथा पिछला रन 2 था, इसलिए परिणामी रन केवल 1 होगा इसलिए तरीके होंगे
ways_reach_score(score-1, false)। - अंत में हमें
countमें कुल तरीके मिल जाएंगे। - परिणाम के रूप में गिनती लौटाएं।
C++ कोड उदाहरण
#include <bits/stdc++.h>
using namespace std;
int ways_reach_score(int score, bool check) {
int count = 0;
if (score == 0) {
return 1;
}
if (check == false && score > 1) {
count += ways_reach_score(score - 1, false) + ways_reach_score(score - 2, true);
} else {
count += ways_reach_score(score - 1, false);
}
return count;
}
int main() {
int score = 4;
bool check = false;
cout << "तरीकों की संख्या: " << ways_reach_score(score, check);
return 0;
}
आउटपुट
तरीकों की संख्या: 4