Rumah >pembangunan bahagian belakang >C++ >C++ Pertanyaan kebarangkalian nombor genap atau ganjil dalam julat tertentu
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.
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.
#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
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!