Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ का प्रयोग करते हुए सीढ़ी के चरणों की संख्या ज्ञात कीजिए

इस समस्या में, हमें एक संख्या N दी गई है जो सीढ़ी बनाने के लिए प्रदान की गई ईंटों की संख्या को दर्शाती है। हमारा काम f . करना है सीढ़ी के चरणों की संख्या बताएं

दी गई ईंटों का उपयोग करते हुए, हमें एक सीढ़ी बनाने की आवश्यकता है। प्रत्येक चरण एक और ईंट लेता है जो अंतिम चरण है। और पहला कदम दो ईंटों का है। हमें ऐसे कदमों की संख्या ज्ञात करनी होगी जो ईंटों से बनाए जा सकते हैं।

समस्या को समझने के लिए एक उदाहरण लेते हैं,

इनपुट

N = 40

आउटपुट

3

स्पष्टीकरण

चरण =1; आवश्यक ईंटें =2; उपयोग की गई कुल ईंटें =2; शेष ईंटें =38

चरण =2; आवश्यक ईंटें =3; उपयोग की गई कुल ईंटें =5; शेष ईंटें =35

चरण =3; आवश्यक ईंटें =4; उपयोग की गई कुल ईंटें =9; शेष ईंटें =31

चरण =4; आवश्यक ईंटें =5; उपयोग की गई कुल ईंटें =14; शेष ईंटें =26

चरण =5; आवश्यक ईंटें =6; उपयोग की गई कुल ईंटें =20; शेष ईंटें =20

चरण =6; आवश्यक ईंटें =7; उपयोग की गई कुल ईंटें =27; शेष ईंटें =13

चरण =7; आवश्यक ईंटें =8; उपयोग की गई कुल ईंटें =35; शेष ईंटें =5

आगे कोई कदम नहीं बनाया जा सकता क्योंकि 8वें चरण में 9 ईंटों की आवश्यकता होती है और केवल 5 ही मौजूद होते हैं।

समाधान दृष्टिकोण

समस्या का एक सरल समाधान लूप का उपयोग करना है, 2 से शुरू होकर उपयोग की जाने वाली ईंटों की संख्या N से अधिक हो जाती है और फिर अंतिम चरण की गणना वापस कर दी जाती है।

यह समाधान अच्छा है लेकिन समय जटिलता क्रम N की है। और योग सूत्र और बाइनरी खोज का उपयोग करके समाधान खोजने के लिए एक बेहतर तरीका बनाया जा सकता है।

हमारे पास X है जो उपयोग की जाने वाली ईंटों की कुल संख्या है जो हमेशा (n*(n+1)) /2 से बनाई जाती है क्योंकि हमारे पास सभी आवश्यक ईंटों का योग है। इस मामले में, हमारे पास दो मानों में से किसी एक का समाधान है जो मध्य और मध्य से पाया जाता है - 1.

उदाहरण

हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम

#include <iostream>
using namespace std;
int findStairCount(int T){
   int low = 1;
   int high = T/2;
   while (low <= high) {
      int mid = (low + high) / 2;
      if ((mid * (mid + 1)) == T)
         return mid;
      if (mid > 0 && (mid * (mid + 1)) > T && (mid * (mid - 1)) <= T)
         return mid - 1;
      if ((mid * (mid + 1)) > T)
         high = mid - 1;
      else
         low = mid + 1;
      }
   return -1;
}
int main(){
   int N = 60;
   int stepCount = findStairCount(2*N);
   if (stepCount != -1)
      stepCount--;
   cout<<"The number of stair steps that can be made is "<<stepCount;
   return 0;
}

आउटपुट

The number of stair steps that can be made is 9

  1. C++ का उपयोग करके एक स्ट्रिंग के सबस्ट्रिंग की संख्या ज्ञात करें

    इस लेख में, आप किसी दिए गए स्ट्रिंग में बनाए जा सकने वाले सबस्ट्रिंग (गैर-रिक्त) की संख्या को खोजने के तरीकों के बारे में जानेंगे। Input : string = “moon” Output : 10 Explanation: Substrings are ‘m’, ‘o’, ‘o’, ‘n’, ‘mo’, &lsqu

  1. C++ . का उपयोग करके स्टॉपिंग स्टेशनों की संख्या ज्ञात कीजिए

    बिंदु X और Y के बीच मध्यवर्ती ट्रेन स्टेशनों की संख्या n है। गिनें कि अलग-अलग तरीकों से ट्रेनों को s स्टेशनों पर रुकने के लिए व्यवस्थित किया जा सकता है जैसे कि कोई भी दो स्टेशन एक दूसरे के बगल में नहीं हैं। तो इस लेख में, हम स्टॉपिंग स्टेशनों की संख्या का पता लगाने के लिए हर संभव तरीके की व्याख्या क

  1. C++ का उपयोग करके सेट पर रिफ्लेक्सिव रिलेशंस की संख्या ज्ञात करें

    इस लेख में, हम एक सेट पर रिफ्लेक्सिव संबंधों की संख्या को खोजने के तरीकों की व्याख्या करेंगे। इस समस्या में, हमें संख्या n दी गई है, और n प्राकृत संख्याओं के समुच्चय पर, हमें प्रतिवर्ती संबंधों की संख्या निर्धारित करनी होगी। चिंतनशील संबंध − समुच्चय A में एक संबंध प्रतिवर्ती कहलाता है यदि (a, a) R