কম্পিউটার

প্রদত্ত পরিসরে জোড় বা বিজোড় সংখ্যার সম্ভাব্যতার উপর C++ প্রশ্ন


সংখ্যার সমতার সম্ভাবনা খুঁজে বের করতে, অর্থাৎ, এটি জোড় বা বিজোড় এবং প্রদত্ত ব্যাপ্তির জন্য। প্রতিটি প্রশ্নের জন্য, আমাদের p / q দ্বারা সম্ভাব্যতা উপস্থাপন করে p এবং q প্রিন্ট করতে হবে, উদাহরণস্বরূপ।

Input : N = 5, arr[] = { 6, 5, 2, 1, 7 }
query 1: 0 2 2
query 2: 1 2 5
query 3: 0 1 4

Output : 0
3 4
1 2

এই সমস্যায়, আমরা সেই সূচক না হওয়া পর্যন্ত বিজোড় এবং জোড় সংখ্যার সংখ্যা বিশিষ্ট দুটি অ্যারে বজায় রাখব। এটি আমাদের সমস্যাগুলিকে সহজ করে, এবং এখন আমাদের তাদের গণনা এবং সেই পরিসরে উপস্থিত উপাদানগুলির সংখ্যা প্রিন্ট করতে হবে৷

সমাধান খোঁজার পদ্ধতি

এই পদ্ধতিতে, আমরা দুটি অ্যারে বজায় রাখি। তারা ith সূচক পর্যন্ত পাওয়া জোড় এবং বিজোড় সংখ্যার সংখ্যা ধারণ করে এবং উপসর্গ যোগ সমস্যার মতো এই সমস্যার সমাধান করে।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void solve(int arr[], int n, int Q,int query[][3]){
    int even[n + 1]; // our array for counting the number of evens find till ith index
    int odd[n + 1]; // our array for counting the number of odds find till ith index
    even[0] = 0; odd[0] = 0; // as we are doing 1 based indexing so we just set 0th index of both arrays to 0
    for (int i = 0; i < n; i++) {
        if (arr[i] & 1) { // if we found odd number we increment odd
            odd[i + 1] = odd[i] + 1;
            even[i + 1] = even[i];
        }
        else { // else we increment even
            even[i + 1] = even[i] + 1;
            odd[i + 1] = odd[i];
        }
    }
    for (int i = 0; i < Q; i++) { // traversing the queries
        int r = query[i][2]; // right range
        int l = query[i][1]; // left range
        int k = query[i][0]; // type of query
        int q = r - l + 1; // number of elements in the given range
        int p;
        if (k) // k is the type of query and we are finding the
            //number of elements with same parity in the given range
            p = odd[r] - odd[l - 1];
        else
            p = even[r] - even[l - 1];
        if (!p) // if p is zero we simply print 0
            cout << "0\n";
        else if (p == q) // if p == q we print 1
            cout << "1\n";
        else {
            int g = __gcd(p, q);
            cout << p / g << " " << q / g << "\n"; // as p and shouldn't have a common gcd so we divide the gcd
        }
    }
}
int main(){
    int arr[] = { 6, 5, 2, 1, 7 }; // given array
    int n = sizeof(arr) / sizeof(int); // size of our array
    int Q = 2; // number of our queries
    int query[Q][3] = {{ 0, 2, 2 },{ 1, 2, 5 }}; // given queries
    solve(arr, n, Q, query);
    return 0;
}

আউটপুট

0
3 4

উপরের কোডের ব্যাখ্যা

উপরের পদ্ধতিতে, আমরা দুটি অ্যারে বজায় রেখে ith সূচকে পাওয়া জোড় এবং বিজোড় সংখ্যার সংখ্যা গণনা করি। এখন আমাদের প্রদত্ত পরিসরে বিদ্যমান জোড় বা বিজোড় সংখ্যার সংখ্যা খুঁজে বের করতে হবে এবং সেই সংখ্যাটি প্রিন্ট করতে হবে এবং উপস্থিত মোট উপাদানের সংখ্যা প্রিন্ট করতে হবে।

উপসংহার

এই টিউটোরিয়ালে, আমরা প্রদত্ত রেঞ্জে জোড় বা বিজোড় সংখ্যার সম্ভাব্যতার প্রশ্নগুলি সমাধান করি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সম্পূর্ণ পদ্ধতি (স্বাভাবিক) শিখেছি যার মাধ্যমে আমরা এই সমস্যার সমাধান করেছি। আমরা অন্যান্য ভাষা যেমন সি, জাভা, পাইথন এবং অন্যান্য ভাষায় একই প্রোগ্রাম লিখতে পারি। আমরা আশা করি আপনার এই টিউটোরিয়ালটি সহায়ক হবে৷


  1. একটি প্রদত্ত মোবাইল নম্বর C++ এ অভিনব কিনা তা পরীক্ষা করুন

  2. একটি সংখ্যা প্রদত্ত বেসে আছে নাকি C++ তে নেই তা পরীক্ষা করুন

  3. শর্তসাপেক্ষ বিবৃতি ব্যবহার না করে "জোড়" বা "বিজোড়" প্রিন্ট করার জন্য C++ প্রোগ্রাম

  4. সংখ্যা জোড় বা বিজোড় কিনা তা পরীক্ষা করার জন্য C++ প্রোগ্রাম