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

C++ में सेट बिट्स की संख्या के अनुसार ऐरे सॉर्ट करें


यहां हम सेट-बिट्स के आधार पर ऐरे को सॉर्ट करने की एक दिलचस्प समस्या देखेंगे। जब ऐरे में किसी एलिमेंट में अधिक सेट-बिट्स होते हैं, तो उसे उस एलिमेंट से पहले रखा जाएगा जिसमें कम सेट बिट्स होते हैं। मान लीजिए कुछ नंबर्स हैं 12, 15, 7। तो सेट बिट्स मूल रूप से उनके बाइनरी प्रतिनिधित्व में 1's की संख्या है। ये हैं 1100 (12), 1111 (15), और 0111 (7)। तो सॉर्ट करने के बाद यह इस तरह दिखेगा -

1111, 0111, 1100 (15, 7, 12)

यहां हमें सबसे पहले सेट-बिट्स की संख्या पता करनी होगी। फिर हम उन्हें सॉर्ट करने के लिए C++ STL सॉर्ट फंक्शन का उपयोग करेंगे। हमें सेट-बिट काउंट्स के आधार पर तुलना लॉजिक बनाना होगा।

एल्गोरिदम

getSetBitCount(number): Begin    count := 0    जब तक number 0 नहीं है, करें       यदि number AND 1 = 1, तो          count को 1 से बढ़ाएं       number = number को एक बिट राइट शिफ्ट करें    done    return count End compare(num1, num2): Begin    count1 = getSetBitCount(num1)    count2 = getSetBitCount(num2)    यदि count1 <= count2, तो false रिटर्न करें, अन्यथा true रिटर्न करें End

उदाहरण

#include<iostream> #include<algorithm> using namespace std; int getSetBitCount(int number){    int count = 0;    while(number){       if(number & 1 == 1)       count++;       number = number >> 1 ; //नंबर को एक बिट राइट शिफ्ट करें    }    return count; } int compare(int num1, int num2){    int count1 = getSetBitCount(num1);    int count2 = getSetBitCount(num2);    if(count1 <= count2)    return 0;    return 1; } main(){    int data[] = {2, 9, 4, 3, 5, 7, 15, 6, 8};    int n = sizeof(data)/sizeof(data[0]);    sort(data, data + n, compare);    for(int i = 0; i<n; i++){       cout << data[i] << " ";    } }

आउटपुट

15 7 9 3 5 6 2 4 8

  1. - C++ में समान सेट बिट्स के साथ अगली बड़ी संख्या

    हमें एक संख्या n दी गई है, हमें वह संख्या ज्ञात करनी है जो n से बड़ी है और जिसमें n के बाइनरी प्रतिनिधित्व के समान सेट बिट्स हैं। बाइनरी प्रतिनिधित्व में अंक 1 को सेट बिट कहा जाता है। आइए एक उदाहरण देखते हैं। इनपुट 124 आउटपुट 143 एल्गोरिदम संख्या n आरंभ करें। सेट बिट्स की संख्या की गणना प्राप्त

  1. - C++ में 2D वर्ण सरणी में दी गई स्ट्रिंग की संख्या गिनना

    निम्नलिखित समस्या दैनिक समाचार पत्र क्रॉसवर्ड का एक उदाहरण है, यहां हमें एक 2-आयामी वर्ण सरणी दी गई है और समस्या कथन 2-आयामी वर्ण सरणी भूलभुलैया से दिए गए शब्द को ढूंढना है। खोज एल्गोरिदम में टॉप-टू-बॉटम, राइट-टू-लेफ्ट और इसके विपरीत से व्यक्तिगत वर्ण ढूंढना शामिल है लेकिन विकर्ण रूप से नहीं। उदाहरण

  1. C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें C++ में एक सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या गिनें

    समस्या विवरण दो संख्याएं e और p दी गई हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p पार्टीशन/उपसमुच्चयों में विभाजित कर सकते हैं। उदाहरण इनपुट e=4 p=2 आउटपुट सेट को k उपसमुच्चयों में विभाजित करने के तरीकों की संख्या: 7 व्याख्या यदि तत्व हैं: a b c d तो उन्हें 2 पार्टीशन