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

C++ में समान सेट बिट्स वाली संख्याओं को जोड़कर अधिकतम योग (Maximum sum by adding numbers with same number of set bits)


समस्या कथन

N संख्याओं की एक सरणी दी गई है, कार्य उन संख्याओं को जोड़कर प्राप्त किए जा सकने वाले अधिकतम योग को ढूंढना है जिनमें समान संख्या में सेट बिट्स (set bits) हैं।

उदाहरण

यदि इनपुट सरणी {2, 5, 8, 9, 10, 7} है तो आउटपुट 24 होगा:

  • 2 में सेट बिट्स की संख्या 1 है
  • 5 में सेट बिट्स की संख्या 2 है
  • 8 में सेट बिट्स की संख्या 1 है
  • 9 में सेट बिट्स की संख्या 2 है
  • 10 में सेट बिट्स की संख्या 2 है
  • 7 में सेट बिट्स की संख्या 3 है

तब (5 + 9 + 10) का योग 24 है जिनके सेट बिट्स की संख्या = 2 है।

एल्गोरिदम

  • सरणी में पार करें और प्रत्येक तत्व के लिए सेट बिट्स की संख्या गिनें।
  • 32 बिट्स के लिए एक सरणी आरंभ करें, यह मानते हुए कि संख्या में अधिकतम 32 सेट बिट्स हो सकते हैं।
  • सरणी में पुनरावृति करें और सरणी तत्व को उस स्थिति में जोड़ें जो सेट बिट्स की संख्या को इंगित करता है।
  • पार करें और अधिकतम योग ढूंढें और वापस करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;

int bitCount(int n){
    int count = 0;
    while (n) {
        count++;
        n = n & (n - 1);
    }
    return count;
}

int maxSum(int arr[], int n){
    int bits[n];
    for (int i = 0; i < n; i++) {
        bits[i] = bitCount(arr[i]);
    }
    int sum[32] = { 0 };
    for (int i = 0; i < n; i++) {
        sum[bits[i]] += arr[i];
    }
    int maximum = 0;
    for (int i = 0; i < 32; i++) {
        maximum = max(sum[i], maximum);
    }
    return maximum;
}

int main(){
    int arr[] = {2, 5, 8, 9, 10, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "अधिकतम योग = " << maxSum(arr, n) << endl;
    return 0;
}

आउटपुट

अधिकतम योग = 24
  1. - C++ में बदसूरत संख्याओं वाले सब-ऐरे की अधिकतम लंबाई

    समस्या कथन N तत्वों का एक ऐरे arr[] दिया गया है (0 ≤ arr[i] ≤ 1000)। कार्य केवल बदसूरत संख्याओं वाले सब-ऐरे की अधिकतम लंबाई ढूंढना है। बदसूरत संख्याएं वे संख्याएं हैं जिनके केवल अभाज्य गुणनखंड 2, 3 या 5 होते हैं। उदाहरण के लिए नीचे श्रृंखला से कुछ संख्याएं हैं: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15,..

  1. - C++ का उपयोग करके मैट्रिक्स में अधिकतम योग वाला कॉलम खोजें

    मान लीजिए हमारे पास M x N आकार का एक मैट्रिक्स है। हमें वह कॉलम ढूंढना है जिसका योग अधिकतम है। इस प्रोग्राम में हम किसी ट्रिकी दृष्टिकोण का पालन नहीं करेंगे, बल्कि सरणी को कॉलम-वार पार करेंगे, प्रत्येक कॉलम का योग प्राप्त करेंगे, और यदि योग अधिकतम है, तो उस योग और कॉलम इंडेक्स को प्रिंट करेंगे। उदा

  1. - C++ में दो संख्याओं के वैकल्पिक बिट्स से नई संख्या बनाएं

    इस समस्या में, हमें दो संख्याओं के वैकल्पिक बिट्स का उपयोग करके एक संख्या उत्पन्न करने की आवश्यकता है। तो, इस समस्या में हम दूसरी संख्या से पहला बिट लेंगे, फिर पहली संख्या से दूसरा बिट, तीसरा बिट फिर से दूसरी संख्या से और चौथा पहली से और इसी तरह। पहली से, तीसरा बिट फिर से दूसरी संख्या से और चौथा पहल