धनात्मक संख्याओं की एक सरणी और दो पूर्णांक A और B को देखते हुए। दो खिलाड़ी एक खेल खेल रहे हैं जिसमें वे सरणी में संख्याओं को कम करेंगे। खिलाड़ी 1 एरे के किसी भी तत्व को ए से कम कर सकता है और खिलाड़ी 2 एरे के किसी भी तत्व को बी से बढ़ा सकता है। लक्ष्य उन संख्याओं की गणना करना है जिन्हें खिलाड़ी 1 द्वारा 0 या उससे कम किया जा सकता है। पहला खिलाड़ी बनाता है पहला कदम। एक बार 0 या उससे कम की संख्या को खिलाड़ी 2 द्वारा ध्यान में नहीं रखा जा सकता है।
उदाहरण के लिए
इनपुट
arr[] = { 1,4,5,2 } A=2, B=3
आउटपुट
Count of numbers that can be reduced to zero or less in a game are: 1
स्पष्टीकरण
The only number that can be reduced by player 1 is 1 as on first move it will be reduced to −1. Rest all will become greater than A after player 2 increases their value.
इनपुट
arr[] = { 1,4,5,2 } A=4, B=4
आउटपुट
Count of numbers that can be reduced to zero or less in a game are: 2
स्पष्टीकरण
On first move player 1 reduces 4 to 0. arr[]= [ 1, 0, 5, 2 ] Player 2 will increase 1 to 4. arr[]= [ 5, 0, 5, 2 ] Player 1 will decrease 2 to −2. Arr[] = [ 5, 0, 5, −2 ]. From now onwards all numbers are greater than A so cannot be reduced by player 1 to 0 or less as player 2 is also increasing them simultaneously.
नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
इस दृष्टिकोण में पहले जांचें कि क्या ए> बी। यदि हाँ, तो N चालों में A, arr[] के सभी N तत्वों को 0 या उससे कम कर देगा। यदि A<=B तो हम जाँच करेंगे
-
सभी संख्याएँ जो खिलाड़ी 2 के बाद भी A से बड़ी नहीं हो जाती हैं, उनमें B जोड़ देती हैं। मान लें कि इसे C1 के रूप में गिना जाता है।
-
सभी संख्याएँ जो A से कम हैं और खिलाड़ी 2 के बाद A से बड़ी हो जाती हैं, उनमें B जोड़ देती हैं। मान लें कि इसे C2 के रूप में गिना जाता है।
कुल गणना C=C1+ (C2+1)/2 होगी। जैसा कि 2 के मामले में, उनमें से केवल आधा घटकर 0 या उससे कम हो जाएगा क्योंकि दोनों खिलाड़ी एक साथ उन्हें बढ़ाते/घटाते हैं। और खिलाड़ी 2 उनमें से केवल आधे को A से अधिक तक बढ़ा सकता है। इस बीच, खिलाड़ी 1 अन्य आधे को घटाकर <=0 कर देगा।
-
एक पूर्णांक सरणी लें जिसमें धनात्मक संख्याएँ हों।
-
दो चर ए और बी लें।
-
फ़ंक्शन reduce_zero(int arr[], int size, int A, int B) उन संख्याओं की गिनती लौटाएगा जिन्हें किसी गेम में शून्य या उससे कम तक घटाया जा सकता है
-
प्रारंभिक गणना 0 के रूप में लें।
-
अस्थायी गणना के रूप में दो चर temp_1 और temp_2 लें।
-
अगर ए> बी तो सरणी की लंबाई लौटाएं जो आकार है।
-
अब प्रत्येक गिरफ्तारी के लिए लूप के लिए उपयोग करके सरणी को पार करें [i] यदि तत्व का योग और बी <ए तो वेतन वृद्धि temp_1।
-
प्रत्येक तत्व arr[i] <=A, वेतन वृद्धि temp_2 के लिए।
-
अब लूप के अंत के बाद, गिनती=temp_1+ (temp_2+1)/2 लें। जैसा कि सूत्र में दिया गया है।
-
परिणाम के रूप में वापसी की गिनती।
उदाहरण
#include <bits/stdc++.h> using namespace std; int reduced_zero(int arr[], int size, int A, int B){ int count = 0; int temp_1 = 0, temp_2 = 0; if (A > B){ return size; } for(int i = 0; i < size; i++){ if (A >= arr[i] + B){ temp_1++; } else if(A >= arr[i]){ temp_2++; } } int temp = (temp_2 + 1) / 2; count = temp + temp_1; return count; } int main(){ int arr[] = { 3, 3, 1, 2, 4, 7, 1}; int A = 4, B = 1; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of numbers that can be reduced to zero or less in a game are: "<<reduced_zero(arr, size, A, B); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of numbers that can be reduced to zero or less in a game are: 7