Rumah >pembangunan bahagian belakang >C++ >C++ Pertanyaan kebarangkalian nombor genap atau ganjil dalam julat tertentu

C++ Pertanyaan kebarangkalian nombor genap atau ganjil dalam julat tertentu

WBOY
WBOYke hadapan
2023-09-13 14:21:071289semak imbas

C++ 查询给定范围内偶数或奇数的概率

Cari kebarangkalian pariti nombor dalam julat tertentu, iaitu sama ada nombor genap atau nombor ganjil. Untuk setiap pertanyaan, kita perlu mencetak p dan q, cth.

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

Dalam masalah ini, kami akan mengekalkan dua tatasusunan yang masing-masing mengandungi jumlah ganjil dan genap sehingga indeks tersebut. Ini memudahkan masalah kami, kini kami perlu mencetak nombor mereka dan bilangan elemen yang terdapat dalam julat.

Kaedah penyelesaian

Dalam kaedah ini, kami mengekalkan dua tatasusunan. Ia mengandungi bilangan nombor genap dan ganjil yang ditemui sehingga indeks ke-i, dan menyelesaikan masalah seperti masalah jumlah awalan.

Contoh

#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;
}

Output

0
3 4

Penjelasan kod di atas

#🎜🎜 dalam kaedah Array di atas untuk mengira bilangan nombor genap dan nombor ganjil yang ditemui sehingga indeks ke-i. Sekarang kita perlu mencari bilangan nombor genap atau ganjil dalam julat tertentu dan mencetak nombor itu dan mencetak jumlah bilangan kejadian unsur.

Kesimpulan

Dalam tutorial ini, kami menyelesaikan soalan tentang kebarangkalian nombor genap atau ganjil dalam julat tertentu. Kami juga mempelajari program C++ untuk masalah ini dan kaedah lengkap kami untuk menyelesaikan masalah ini (kaedah biasa). Kita boleh menulis program yang sama dalam bahasa lain seperti C, Java, Python dan lain-lain. Harap anda mendapati tutorial ini membantu.

Atas ialah kandungan terperinci C++ Pertanyaan kebarangkalian nombor genap atau ganjil dalam julat tertentu. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam