কম্পিউটার টিউটোরিয়াল

C++-এ সাবঅ্যারেগুলোর গড় বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটির সংখ্যা গণনা


একটি অ্যারে arr[] দেওয়া আছে যাতে ধনাত্মক ইন্টিজার আছে। লক্ষ্য হলো arr[]-এর সাবঅ্যারেগুলোর মধ্যে কতটির গড় তার বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটি বের করা।

উদাহরণ ১

ইনপুট

arr[] = { 3, 2, 4 }

আউটপুট

সাবঅ্যারেগুলোর গড় বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটির সংখ্যা: 2

ব্যাখ্যা

সাবঅ্যারেগুলো: [3], [2], [4], [3,2], [2,4], [3,2,4]। [4]-এর গড় ৪ যা [2,3]-এর গড়ের চেয়ে বড়। [3,2,4]-এর গড় ৩ যা খালি সেটের গড়ের চেয়ে বড়।

উদাহরণ ২

ইনপুট

arr[] = { 3, 3, 3 }

আউটপুট

সাবঅ্যারেগুলোর গড় বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটির সংখ্যা: 1

ব্যাখ্যা

সাবঅ্যারেগুলো: [3], [3], [3], [3,3], [3,3], [3,3,3]। [3,3,3]-এর গড় ৩ যা খালি সেটের গড়ের চেয়ে বড়।

প্রয়োগ করা পদ্ধতি

এই পদ্ধতিতে একটি প্রিফিক্স সাম অ্যারে তৈরি করা হয় যেটি new_arr[i]-এ ইনডেক্স i পর্যন্ত এলিমেন্টগুলোর যোগফল রাখে। এখন আমাদের কাছে আগের এলিমেন্ট পর্যন্ত যোগফল আছে, তাই arr[i] পর্যন্ত যোগফল এবং এলিমেন্টের সংখ্যা j-i+1 ক্যালকুলেট করে গড় বের করা হয়।

  • ইনপুট হিসেবে অ্যারে arr[] নিন।

  • count(int arr[], int size) ফাংশনটি সাবঅ্যারেগুলোর সংখ্যা রিটার্ন করে।

  • new_arr[size] অ্যারে নিন ইনডেক্স পর্যন্ত যোগফল রাখার জন্য।

  • i=0 থেকে i পর্যন্ত ট্রুভার্স করে new_arr[i] = new_arr[i-1] + arr[i-1] সেট করুন।

  • এখন দুটি নেস্টেড for লুপ দিয়ে new_arr[] ট্রুভার্স করুন।

  • total_1 হিসেবে সাবঅ্যারেতে যোগফল এবং count_1 হিসেবে এলিমেন্ট সংখ্যা ক্যালকুলেট করুন।

  • total_2 হিসেবে বাকি সাবঅ্যারেতে যোগফল এবং count_2 হিসেবে এলিমেন্ট সংখ্যা ক্যালকুলেট করুন।

  • গড় হিসেবে check_1 = total_1 / count_1 এবং check_2 = total_2 / count_2 ক্যালকুলেট করুন।

  • যদি check_1 > check_2 হয় তবে কাউন্ট বাড়ান।

  • for লুপ শেষে কাউন্ট রিটার্ন করুন ফলাফল হিসেবে।

উদাহরণ কোড

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

int count(int arr[], int size) {
    int count = 0; 
    int new_size = size + 1; 
    int new_arr[new_size] = { 0 }; 
    
    for (int i = 1; i < new_size; i++) {
        new_arr[i] = new_arr[i - 1] + arr[i - 1]; 
    } 
    
    for (int i = 1; i < new_size; i++) {
        for (int j = i; j < new_size; j++) {
            int total_1 = new_arr[j] - new_arr[i - 1]; 
            int count_1 = j - i + 1; 
            int total_2 = new_arr[size] - total_1; 
            int count_2 = 0; 
            
            if((size - count_1) == 0) {
                count_2 = 1; 
            } else {
                count_2 = size - count_1; 
            } 
            
            int check_1 = total_1 / count_1; 
            int check_2 = total_2 / count_2; 
            
            if (check_1 > check_2) {
                count++; 
            } 
        } 
    } 
    
    return count; 
} 

int main() { 
    int arr[] = { 2, 6, 2, 4 }; 
    int size = sizeof(arr) / sizeof(arr[0]); 
    cout << "সাবঅ্যারেগুলোর গড় বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটির সংখ্যা: " << count(arr, size); 
    return 0; 
}

আউটপুট

উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি আসবে:

সাবঅ্যারেগুলোর গড় বাকি এলিমেন্টগুলোর গড়ের চেয়ে বড় সেটির সংখ্যা: 6

  1. C++-এ X এলিমেন্ট যারা এক্স্যাক্টলি X সংখ্যক ≥X এলিমেন্ট রাখে অ্যারেতে

  2. C++-এ সেই প্রাকৃতিক সংখ্যাগুলো বের করা যাদের সব পারমুটেশন সংখ্যাটির চেয়ে বড় বা সমান

  3. C++-এ সাইজ K সাব-অ্যারে যার গড় থ্রেশহোল্ড বা তার বেশি

  4. C++-এ প্রতিটি সারি থেকে একটি সংখ্যা নির্বাচন করে XOR শূন্য থেকে বড় হয় কিনা চেক করা