इस समस्या में, हमें एक सरणी arr [] दिया जाता है जिसमें प्रत्येक तत्व बक्सों के ढेर (प्रत्येक इकाई की ऊँचाई) का प्रतिनिधित्व करता है। हमारा कार्य हटाए जाने वाले बक्सों की संख्या ज्ञात करना . है ।
व्यक्ति बक्से के ढेर की ऊंचाई पर सरणी के सूचकांक 0 पर खड़ा है और उसे सरणी के अंत में जाने की जरूरत है। एक ढेर से दूसरे ढेर में जाने की शर्त दूसरे ढेर पर कूदने की है।
कूद तभी संभव है जब अगला ढेर उसी ऊंचाई पर हो या उससे कम ऊंचाई पर हो। यदि अगले ढेर की ऊंचाई अधिक है तो व्यक्ति को अगले ढेर से बक्से निकालने की जरूरत है, जब तक कि ऊंचाई बराबर न हो जाए। हमें उन बक्सों की कुल संख्या ज्ञात करनी होगी जिन्हें पहले बॉक्स से अंतिम बॉक्स में जाते समय हटा दिया जाएगा।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input : arr[] = {5, 7, 3 , 1, 2} Output : 3
स्पष्टीकरण
प्रारंभ में, व्यक्ति की ऊंचाई 5 होती है।
चरण 1 − दूसरे स्थान पर जाने के लिए जिसकी ऊंचाई 7 है, व्यक्ति को 2 बक्से निकालने होंगे।
चरण 2 - ऊंचाई 3 पर तीसरे स्थान पर जाने के लिए, कोई भी बॉक्स नहीं हटाया जाता है।
चरण 3 - ऊंचाई 1 पर अगले स्थान पर जाने के लिए, कोई भी बॉक्स नहीं हटाया जाता है।
चरण 4 - ऊंचाई 2 पर अगली स्थिति में जाने के लिए, एक बॉक्स हटा दिया जाता है। इससे हटाए गए बक्सों की संख्या 3 के बराबर हो जाती है।
समाधान दृष्टिकोण
समस्या का एक सरल समाधान यह है कि सरणी को शुरू से अंत तक ट्रेस किया जाए और जाँच की जाए कि अगला तत्व वर्तमान तत्व से बड़ा है या नहीं। यदि हाँ, तो उनके अंतर को निकाल दिए गए बक्सों . में जोड़ें वेरिएबल जो हटाए जाने वाले बक्से की कुल संख्या रखता है। अंत में, हम बक्से निकाले गए लौटा देंगे ।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <iostream> using namespace std; int findBoxesRemoved(int arr[], int n){ int boxesRemoved = 0; for (int i = 0; i < n-1; i++) { if (arr[i] < arr[i+1]) boxesRemoved += (arr[i+1] - arr[i]); } return boxesRemoved; } int main(){ int arr[] = { 5, 7, 3 , 1, 2, 6 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The total number of boxes to be removed to reach the end is "<<findBoxesRemoved(arr, n); return 0; }
आउटपुट
The total number of boxes to be removed to reach the end is 7