हमें 0 और 1 का एक बाइनरी अनुक्रम दिया गया है। साथ ही मान लें कि एक व्यक्ति current_pos में संग्रहीत स्थिति या बिंदु पर बैठा है। अब current_pos से शुरू करके, यदि बाइनरी अनुक्रम में 0 है तो वह एक कदम बाएं चलता है (current_pos - 1)। यदि यह 1 है तो वह एक कदम दाएं चलता है (current_pos + 1)। लक्ष्य पूरे बाइनरी अनुक्रम के पूरा होने के बाद उसके द्वारा देखे गए विशिष्ट स्थितियों या बिंदुओं को ढूंढना है।
हम इसे किसी बिंदु पर जाने की संख्या का उपयोग करके हल करेंगे। यदि आवृत्ति शून्येतर है, तो विशिष्ट बिंदुओं की गणना बढ़ाएं।
इनपुट
Path[]= "001100" current_pos=3
आउटपुट
संख्या रेखा पर देखे गए विशिष्ट बिंदु: 3
व्याख्या: पथ[0] और स्थिति 3 से शुरू करके।
पथ[0]: 0 → बाएं चलें ...currpos=2 पथ[1]: 0 → बाएं चलें ...currpos=1 पथ[2]: 1 → दाएं चलें ...currpos=2 पथ[3]: 1 → बाएं चलें ...currpos=3 पथ[4]: 0 → बाएं चलें ...currpos=2 पथ[5]: 0 → बाएं चलें ...currpos=1
कुल विशिष्ट स्थितियां 3 हैं, जो 1,2,3 हैं।
इनपुट
Path[]= "010101" current_pos=5
आउटपुट
संख्या रेखा पर देखे गए विशिष्ट बिंदु: 2
व्याख्या: पथ[0] और स्थिति 5 से शुरू करके।
पथ[0]: 0 → बाएं चलें ...currpos=4 पथ[1]: 1 → दाएं चलें ...currpos=5 पथ[2]: 0 → बाएं चलें ...currpos=4 पथ[3]: 1 → दाएं चलें ...currpos=5 पथ[4]: 0 → बाएं चलें ...currpos=4 पथ[5]: 1 → दाएं चलें ...currpos=5
कुल विशिष्ट स्थितियां 2 हैं, जो 4 और 5 हैं।
प्रयुक्त दृष्टिकोण
- 0 और 1 का स्ट्रिंग पथ में संग्रहीत है।
- current_pos प्रारंभिक बिंदु संग्रहीत करता है।
- फ़ंक्शन getDistinctPoints(int current_pos, string path) वर्तमान स्थिति और पथ को इनपुट के रूप में लेता है और विशिष्ट स्थितियों/बिंदुओं की संख्या लौटाता है।
- चर len पथ की लंबाई संग्रहीत करता है।
- सरणी frequency[21] का उपयोग किसी बिंदु पर जाने की संख्या को संग्रहीत करने के लिए किया जाता है। इंडेक्स बिंदु को दर्शाता है। कुल 0-20।
- पथ स्ट्रिंग को पार करना शुरू करें।
- यदि वर्तमान मान 0 है, तो बाएं चलें (current_pos -1)। इस बिंदु की आवृत्ति अपडेट करें frequency[current_pos]++।
- अन्यथा वर्तमान मान 1 है, तो दाएं चलें (current_pos +1)। इस बिंदु की आवृत्ति अपडेट करें frequency[current_pos]++।
- अब आवृत्ति सरणी को पार करें और प्रत्येक शून्येतर मान के लिए। गणना बढ़ाएं।
- Count में देखे गए विशिष्ट बिंदु होते हैं।
- वांछित परिणाम के रूप में count लौटाएं।
उदाहरण कोड
#include <bits/stdc++.h> using namespace std; // 0 से 20 के बीच विशिष्ट बिंदु int getDistinctPoints(int current_pos, string path){ // पथ की लंबाई int len = path.length(); int count=0; // किसी बिंदु पर जाने की संख्या संग्रहीत करने के लिए सरणी int frequency[21]={0}; // पथ में सभी दिशाओं के लिए for (int i = 0; i < len; i++) { // बाएं दिशा के लिए if (path[i] == '0') { current_pos--; frequency[current_pos]++; // विज़िट काउंट बढ़ाएं } // यदि दिशा दाएं है else { current_pos++; frequency[current_pos]++; // विज़िट काउंट बढ़ाएं } } for(int i=0;i<21;i++) if(frequency[i]!=0) // यदि देखा गया तो frequency[i] शून्येतर है count++; return count; } int main(){ int current_pos = 3; string path = "011101100"; cout << "संख्या रेखा पर देखे गए विशिष्ट बिंदुओं की संख्या:<<(getDistinctPoints(current_pos, path)); return 0; } आउटपुट
संख्या रेखा पर देखे गए विशिष्ट बिंदुओं की संख्या: 5