संख्याओं की समता की प्रायिकता ज्ञात करना, अर्थात यह सम है या विषम, और दी गई श्रेणियों के लिए। उदाहरण के लिए, प्रत्येक क्वेरी के लिए, हमें 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 इस समस्या में, हम दो सरणियों को बनाए रखेंगे जिनमें उस सूचकांक तक मौजूद विषम और सम संख्याओं की संख्या होगी। यह हमारी समस्याओं को सरल करता है, और अब हमें उनकी गिनती और उस सीमा में मौजूद तत्वों की संख्या को प्रिंट करने की आवश्यकता है।
समाधान खोजने के लिए दृष्टिकोण
इस दृष्टिकोण में, हम दो सरणियाँ बनाए रखते हैं। इनमें इथ इंडेक्स तक पाई गई सम और विषम संख्याओं की संख्या होती है और इस समस्या को उपसर्ग योग समस्याओं की तरह हल करते हैं।
उदाहरण
#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++ प्रोग्राम और संपूर्ण दृष्टिकोण (Normal) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगा होगा।