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

C++ में रेंज [0, n] में केवल 1 सेट बिट वाली संख्याओं की गिनती


हमें एक संख्या दी गई है और कार्य है 0 से दी गई संख्या तक की रेंज में उन संख्याओं की गिनती करना जिनमें ठीक एक सेट बिट (set bit) है।

बाइनरी संख्या में सेट बिट को 1 से दर्शाया जाता है। जब भी हम किसी पूर्णांक का बाइनरी प्रतिनिधित्व निकालते हैं तो यह 0 और 1 के संयोजन से बनता है। अंक 1 को कंप्यूटर के संदर्भ में सेट बिट कहा जाता है।

इनपुट - int num = 15

आउटपुट - रेंज [0, 15] में केवल 1 सेट बिट वाली संख्याओं की गिनती: 4

व्याख्या - 1 (0001), 2 (0010), 4 (0100), 8 (1000) - इन चार संख्याओं में ठीक एक सेट बिट है।

उपयोग किया गया दृष्टिकोण (नाइव)

  • संख्या इनपुट करें और फंक्शन में पास करें।
  • count वेरिएबल लें।
  • लूप i = 1 से number तक।
  • __builtin_popcount(i) से सेट बिट्स गिनें।
  • यदि 1 है तो काउंट बढ़ाएं।

कुशल दृष्टिकोण

केवल 2 की घातें (1, 2, 4, 8, 16, ...) में ठीक एक सेट बिट होती है। इसलिए हम केवल 2 से गुणा करते हुए गिनती कर सकते हैं।

  • temp = 1 से शुरू करें।
  • जब तक temp <= number: count++, temp *= 2।

उदाहरण (नाइव दृष्टिकोण)

#include <iostream> 
using namespace std; 

int set_bits(int number) { 
    int count = 0; 
    for (int i = 1; i <= number; i++) { 
        int temp = __builtin_popcount(i); 
        if (temp == 1) count++; 
    } 
    return count; 
} 

int main() { 
    int number = 15; 
    cout << "Count of numbers having only 1 set bit in the range [0, " << number << "] are: " << set_bits(number); 
    return 0; 
}

आउटपुट

Count of numbers having only 1 set bit in the range [0, 15] are: 4

उदाहरण (कुशल दृष्टिकोण)

#include <iostream> 
using namespace std; 

int set_bits(int number) { 
    int count = 0; 
    int temp = 1; 
    while (temp <= number) { 
        count++; 
        temp = temp * 2; 
    } 
    return count; 
} 

int main() { 
    int number = 15; 
    cout << "Count of numbers having only 1 set bit in the range [0, " << number << "] are: " << set_bits(number); 
    return 0; 
}

आउटपुट

Count of numbers having only 1 set bit in the range [0, 15] are: 4

  1. - C++ में दी गई रेंज में फैक्टोरियल संख्याओं की गिनती करें

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

  1. - C++ में दी गई सीमा में सबसे छोटा गुणनखंड K वाली सभी संख्याओं की गणना करें

    इस ट्यूटोरियल में, हम सबसे छोटे गुणनखंड K वाली सीमा में संख्याओं को खोजने के लिए एक प्रोग्राम पर चर्चा करेंगे।इसके लिए हमें एक सीमा [a,b] प्रदान की जाएगी। हमारा कार्य दी गई सीमा में उन संख्याओं की गिनती करना है जिनका सबसे छोटा गुणनखंड K है।उदाहरण#include <bits/stdc++.h> using namespace std; //

  1. - C++ में अधिकतम लंबाई N वाले केवल अंक 3 और 4 से बनी संख्याओं की गिनती

    एक संख्या N दी गई है। हमें ऐसी संख्याओं की गिनती ढूंढनी है जिन्हें अंक 3 और 4 का उपयोग करके बनाया जा सकता है। तो यदि N = 6, तो संख्याएं 3, 4, 33, 34, 43, 44 होंगी। यदि हम ध्यान से देखें तो इस समस्या को हल कर सकते हैं, एक अंक की संख्या के लिए इसमें 2 संख्याएं 3 और 4 हैं, दो अंकों के लिए, इसमें 4 सं