首頁 >後端開發 >C++ >C++ 查詢給定範圍內偶數或奇數的機率

C++ 查詢給定範圍內偶數或奇數的機率

WBOY
WBOY轉載
2023-09-13 14:21:071302瀏覽

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

在這個問題中,我們將維護兩個數組,分別包含奇數和偶數的數量,直到該索引。這簡化了我們的問題,現在我們需要列印它們的數量以及該範圍內存在的元素的數量。

解決方案的方法

在這個方法中,我們維護兩個陣列。它們包含直到第i個索引找到的偶數和奇數的數量,並且像前綴和問題一樣解決這個問題。

範例

#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&#39;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

以上程式碼的解釋

在上述方法中,我們透過維護兩個陣列來計算找到的到第i個索引的偶數和奇數的數量。現在我們需要找到給定範圍內的偶數或奇數的數量,並列印該數量,並列印出現的元素的總數。

結論

在本教程中,我們解決了關於給定範圍內偶數或奇數的機率的問題。我們也學習了此問題的C 程序和我們解決此問題的完整方法(正常方法)。我們可以用其他語言(如C、Java、Python和其他語言)編寫相同的程式。希望您覺得本教學有幫助。

以上是C++ 查詢給定範圍內偶數或奇數的機率的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除