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

C++ में N को 1 तक कम करने के लिए निश्चित नियमों का पालन करते हुए चरणों की गिनती


हमें एक संख्या N दी गई है। लक्ष्य संख्या को 1 तक कम करने के लिए आवश्यक चरणों की संख्या गिनना है निम्नलिखित नियमों का पालन करके -

  • यदि संख्या 2 की घात है, तो इसे आधा कर दें।

  • अन्यथा इसे N - (N से कम 2 की निकटतम घात) से कम करें।

चरण 1 के लिए, हम जांचेंगे कि N 2 की घात है या नहीं, यह जांचकर कि क्या ceil(log2(N)), floor(log2(N)) समान परिणाम लौटाते हैं। यदि हां तो N=N/2, ऑपरेशन की गिनती बढ़ाते हैं।

यदि चरण 1 का परिणाम गलत है तो हम चरण 2 करेंगे और N से N से कम 2 की निकटतम घात को घटाएंगे। N से कम 2 की निकटतम घात की गणना होगी -

x=floor(log2(N)) → जब N 2 की घात नहीं है, log2(N) फ्लोटिंग पॉइंट मान देता है, floor इसे N से कम निकटतम पूर्णांक तक कम करता है।

अब N=N-pow(2,x) → pow(2,x) N से कम 2 की निकटतम घात देगा। N को कम करें।

आइए उदाहरणों से समझते हैं।

इनपुट - N=20

आउटपुट - आवश्यक चरणों की संख्या: 3

व्याख्या - N=20

20, 2 की घात नहीं है। चरण 2. N से कम 2 की निकटतम घात को N से घटाएं। N=20-16=4. काउंट=1. 4, 2 की घात है। चरण 1. N को आधा करें। N=4/2=2. काउंट=2. 2, 2 की घात है। चरण 1. N को आधा करें। N=2/2=1. काउंट=3. N 1 है कुल चरण काउंट=3।

इनपुट - N=32

आउटपुट - आवश्यक चरणों की संख्या: 5

व्याख्या - N=32

32, 2 की घात है। चरण 1. N को आधा करें। N=32/2=16. काउंट=1. 16, 2 की घात है। चरण 1. N को आधा करें। N=16/2=8. काउंट=2. 8, 2 की घात है। चरण 1. N को आधा करें। N=8/2=4. काउंट=3. 4, 2 की घात है। चरण 1. N को आधा करें। N=4/2=2. काउंट=4. 2, 2 की घात है। चरण 1. N को आधा करें। N=2/2=1. काउंट=5. N 1 है कुल चरण काउंट=5।

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • हम एक पूर्णांक N लेते हैं पूर्णांक मान स्टोर करने के लिए।

  • फंक्शन stepCount(int n) N लेता है और इसे 1 तक कम करने के लिए आवश्यक चरणों की गिनती लौटाता है।

  • प्रारंभिक चरणों की गिनती को 0 के रूप में लेते हैं।

  • अब while(n!=1) दोनों चरण 1, और 2 को n के मान के अनुसार करते हैं।

  • यदि n 2 की घात है (ceil(log2(n))==floor(log2(n)) सही होगा), n को आधा करें। काउंट बढ़ाएं।

  • यदि 2 की घात नहीं है तो n को pow(2,x) से कम करें जहां x floor(log2(n)) है। काउंट बढ़ाएं।

  • जब लूप खत्म होगा तो काउंट में किए गए ऑपरेशन्स की संख्या होगी।

  • काउंट को वांछित परिणाम के रूप में लौटाते हैं।

उदाहरण

#include <iostream> #include <math.h> using namespace std; // कमी के लिए चरणों की संख्या लौटाने का फंक्शन int stepCount(int n){ int count=0; while(n!=1){ if(ceil(log2(n))==floor(log2(n))) //यदि n 2 की घात है तो यह सही है{ n=n/2; //n को आधा करें count++; } else { int x=floor(log2(n)); //फ्लोर मान n=n-(pow(2,x)); //2^x, n से कम 2 की निकटतम घात है count++; } } return count; } int main(){ int N = 96; cout <<"N को 1 तक कम करने के लिए आवश्यक चरणों की संख्या: "<<stepCount(N); return 0; }

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्नलिखित आउटपुट उत्पन्न करेगा -

N को 1 तक कम करने के लिए आवश्यक चरणों की संख्या: 6

  1. C++ में आयत में वर्गों की संख्या गिनना C++ में आयत में वर्गों की संख्या गिनना

    =B। लक्ष्य LxB आकार के आयत में समायोजित किए जा सकने वाले वर्गों की संख्या ढूंढना है। उपरोक्त आकृति 3x2 आकार के एक आयत को दर्शाती है। इसमें 2, 2x2 वर्ग और 6, 1x1 वर्ग हैं। कुल वर्ग = 6+2=8। LxB आकार के हर आयत में L*B संख्या के 1x1 वर्ग होते हैं। सबसे बड़े वर्ग BxB आकार के होते हैं। L=B=1 के लिए, वर

  1. - C++ में जांचें कि क्या कोई संख्या दूसरी संख्या की घात है

    यहां हम देखेंगे कि क्या कोई संख्या दूसरी संख्या की घात है या नहीं। मान लीजिए संख्या 125 और दूसरी संख्या 5 दी गई है। तो यह सच लौटाएगा जब यह पाता है कि 125, 5 की घात है। इस मामले में यह सच है। 125 = 5³। एल्गोरिदम isRepresentPower(x, y): Begin if x = 1, then if y = 1, return true, otherwis

  1. - C++ प्रोग्राम: संख्या की घात की गणना करें

    परिचयकिसी संख्या की घात की गणना x^y के रूप में की जा सकती है जहां x संख्या है और y उसकी घात है। उदाहरण के लिए, x = 2 और y = 10, तो x^y = 1024। संख्या की घात की गणना रिकर्सिव और नॉन-रिकर्सिव प्रोग्राम का उपयोग करके की जा सकती है। दोनों नीचे दिए गए हैं। नॉन-रिकर्सिव प्रोग्राम का उपयोग करके संख्या की घ