हमें 0 से 9 तक की संख्याओं की एक स्ट्रिंग दी गई है। यह स्ट्रिंग एक दशमलव संख्या को दर्शाती है। लक्ष्य उन सभी सबस्ट्रिंग्स को ढूंढना है जो एक दशमलव संख्या को दर्शाती हैं जो संख्या X से बड़ी है। शर्त यह है कि सबस्ट्रिंग 0 से शुरू नहीं होनी चाहिए। यानी "2021" में, "02", "021", "0" शामिल नहीं होंगे।
हम इसे सभी सबस्ट्रिंग्स के पहले मान की जांच करके करेंगे, यदि यह 0 से बड़ा है तो उस इंडेक्स से सबस्ट्रिंग्स बनाना शुरू करेंगे और उन्हें stoi() का उपयोग करके पूर्णांक में बदलेंगे। यदि सबस्ट्रिंग > X है तो काउंट बढ़ाएंगे।
आइए उदाहरणों से समझते हैं।
इनपुट - str="123" X=12
आउटपुट - X से बड़े संख्यात्मक मान वाले सबस्ट्रिंग्स की संख्या: 2
व्याख्या 12 से बड़े सबस्ट्रिंग्स: 123 और 23।
इनपुट - str="111" X=100
आउटपुट - X से बड़े संख्यात्मक मान वाले सबस्ट्रिंग्स की संख्या: 1
व्याख्या केवल 111, 100 से बड़ा है।
नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम केवल संख्याओं की एक स्ट्रिंग str लेते हैं।
str की लंबाई को len=str.length() में स्टोर करते हैं।
फंक्शन greater_X(string str, int x) स्ट्रिंग और उसकी लंबाई लेता है और X से बड़ी दशमलव संख्या बनाने वाले सबस्ट्रिंग्स की गिनती लौटाता है।
FOR लूप का उपयोग करके स्ट्रिंग को पार करते हैं।
इंडेक्स i=0 से i
यदि कोई str[i] != '0' है तो उससे शुरू होने वाले सभी सबस्ट्रिंग्स वैध होंगे।
इंडेक्स j=1 से i+j <= len तक, सबस्ट्रिंग की लंबाई के लिए।
सबस्ट्रिंग str.substr(i,j) को stoi() का उपयोग करके दशमलव में बदलते हैं। यदि यह X से अधिक है तो काउंट बढ़ाते हैं।
काउंट को परिणाम के रूप में लौटाते हैं।
उदाहरण
#include <bits/stdc++.h> using namespace std; int greater_X(string str, int x){ int count = 0; int len = str.length(); for (int i = 0; i < len; ++i){ if(str[i] != '0'){ for (int j=1; (i + j) <= len; ++j){ if (stoi(str.substr(i, j)) > x){ count++; } } } } return count; } int main(){ string str = "987"; int x = 100; cout<<"X से बड़े संख्यात्मक मान वाले सबस्ट्रिंग्स की संख्या: "<<greater_X(str, x); return 0; } आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -
X से बड़े संख्यात्मक मान वाले सबस्ट्रिंग्स की संख्या: 1