C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

与えられた範囲での偶数または奇数の確率に関する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

この問題では、そのインデックスまでに存在する奇数と偶数の数を含む2つの配列を維持します。これにより問題が単純化され、その数とその範囲に存在する要素の数を出力する必要があります。

解決策を見つけるためのアプローチ

このアプローチでは、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'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

上記のコードの説明

上記のアプローチでは、2つの配列を維持することにより、i番目のインデックスで見つかった偶数と奇数の数をカウントします。次に、指定された範囲に存在する偶数または奇数の数を見つけて、その数を印刷し、存在する要素の総数を印刷する必要があります。

結論

このチュートリアルでは、指定された範囲の偶数または奇数の確率に関するクエリを解決します。また、この問題のC ++プログラムと、この問題を解決するための完全なアプローチ(通常)についても学びました。同じプログラムを、C、java、python、その他の言語などの他の言語で作成できます。このチュートリアルがお役に立てば幸いです。


  1. 条件文を使用せずに「偶数」または「奇数」を出力するC++プログラム

    このセクションでは、(<、 =、==)のような条件付きステートメントを使用せずに、数値が奇数か偶数かを確認する方法を説明します。 条件文を使用することで、奇数または偶数を簡単に確認できます。数値を2で割って、余りが0かどうかを確認できます。 0の場合、それは偶数です。それ以外の場合は、数値と1を使用してAND演算を実行できます。答えが0の場合は偶数、それ以外の場合は奇数です。 ここでは、条件ステートメントを使用できません。奇数または偶数をチェックするための2つの異なる方法が表示されます。 方法1 ここでは、文字列の配列を作成します。インデックス0の位置は「偶数」を保持し、インデックス1の

  2. 数が偶数か奇数かをチェックするC++プログラム

    数値は、2で割り切れる場合でも偶数であり、2で割り切れない場合は奇数です。 偶数のいくつかは-です 2, 4, 6, 8, 10, 12, 14, 16 奇数のいくつかは-です 1, 3, 5, 7, 9, 11, 13, 15, 17 モジュラスを使用して数値が偶数か奇数かを確認する モジュラスを使用して数値が偶数か奇数かを確認するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int main() {    int num = 25;    if(num % 2 =