यहां हम सरणी से संबंधित एक दिलचस्प समस्या देखेंगे। n तत्वों के साथ एक सरणी है। हमें n तत्वों की एक और सरणी बनानी है। लेकिन दूसरी सरणी की i-वें स्थिति i-वें तत्व को छोड़कर पहले सरणी के सभी तत्वों का गुणनफल धारण करेगी। और एक बाधा यह है कि हम इस समस्या में डिवीजन ऑपरेटर का उपयोग नहीं कर सकते हैं। हमें इस समस्या को बिना किसी अतिरिक्त स्थान का उपयोग किए हल करना होगा।
यदि हम विभाजन, संचालन का उपयोग कर सकते हैं, तो हम सभी तत्वों का उत्पाद प्राप्त करके इस समस्या को आसानी से हल कर सकते हैं, फिर पहले सरणी के i-वें तत्व को विभाजित करें और इसे दूसरे सरणी के i-वें स्थान पर संग्रहीत करें।
यहां हम एक अस्थायी चर लेकर हल कर रहे हैं, जो कि बाएं हिस्से और दाएं हिस्से का उत्पाद ढूंढ रहा है। यह मान अंतिम सरणी में रखा जाएगा। तो यह अतिरिक्त जगह नहीं लेगा।
एल्गोरिदम
productArray(arr, n)
begin define an array called res of size n fill the res array with 1 temp := 1 for i in range 1 to n, do res[i] := temp; temp := temp * arr[i] done for i in range n-1 down to 0, do res[i] = res[i] * temp temp := temp * arr[i] done return res end
उदाहरण
#include<iostream> using namespace std; void printArray(int arr[], int n) { for(int i = 0; i<n; i++) { cout << arr[i] << " "; } cout << endl; } void productArray(int arr[], int product[], int n) { int temp = 1; for(int i = 0; i<n; i++) { product[i] = 1; //set all elements of product as 1 } for(int i = 0; i < n; i++) { //temp variable will hold product of elements on left excluding arr[i] product[i] = temp; temp *= arr[i]; } temp = 1; for(int i = n - 1; i >= 0; i--) { //temp variable will hold product of elements on right excluding arr[i] product[i] *= temp; temp *= arr[i];} } } main() { int myArr[7] = {5, 4, 7, 6, 9, 2, 3}; int resArr[7]; cout << "Initial Array: "; printArray(myArr, 7); productArray(myArr, resArr, 7); cout << "Final Array: "; printArray(resArr, 7); }
आउटपुट
Initial Array: 5 4 7 6 9 2 3 Final Array: 9072 11340 6480 7560 5040 22680 15120