इस समस्या में, हमें दो नंबर L और R दिए गए हैं। हमारे पास एक सरणी arr[] भी है जैसे कि arr[i] =i*(-1)^i . हमारा काम arr[i] =i*(-1)^i.
होने पर एक ऐरे में इंडेक्स L से R तक एलिमेंट के योग की गणना करने के लिए एक प्रोग्राम बनाना है।इसलिए, हमें ऐरे के रेंज [एल, आर] के भीतर तत्वों का योग खोजने की जरूरत है।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट
L = 2 , R = 6
आउटपुट
4
स्पष्टीकरण
arr[] = {-1, 2, -3, 4, -5, 6} Sum = 2+ (-3) + 4 + (-5) + 6 = 4
समस्या का एक सरल समाधान होगा L से R तक एक लूप चलाना और फिर सभी सम संख्याओं को जोड़ना और सभी विषम संख्याओं को घटाना। और फिर अंत में राशि लौटा दें।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,
#include <iostream> #include <math.h> using namespace std; int CalcArrSumLtoR(int L, int R) { int sum = 0; for (int i = L; i <= R; i++){ sum += (i * pow((-1), i)); } return sum; } int main() { int L = 3, R = 15; cout<<"Sum of elements of array from index "<<L<<" to "<<R<<" is "lt;lt;CalcArrSumLtoR(L, R); return 0; }
आउटपुट
Sum of elements of array from index 3 to 15 is -9
यह एक प्रभावी तरीका नहीं है और O(n) समय जटिलता में समस्या का समाधान करेगा।
एक कुशल समाधान n विषम संख्याओं के योग के लिए सूत्र का उपयोग करना होगा। तो,
पहली n विषम संख्याओं का योग =n*n
पहली n सम संख्याओं का योग =n*(n+1)
यहां, अंतिम राशि की गणना इस प्रकार की जाएगी
sum = (sum of first R even number - sum of first (L-1) even number ) - (sum of first R odd number - sum of first (L-1) odd number )
* n तक N/2 सम/विषम संख्या होगी। यानी R/2 सम संख्या होगी। इसलिए, हम राशि की गणना करने के लिए R/2 और L/2 का उपयोग करेंगे।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम,
#include <iostream> using namespace std; long int findSum(int n, bool isEven) { long int total = 0; if(isEven == true){ total = (n) / 2; return (total * (total+1)); } else { total = (n + 1) / 2; return total * total; } } int CalcArrSumLtoR(int L, int R) { return (findSum(R, true) - findSum(L - 1, true))- (findSum(R, false) - findSum(L - 1, false)); } int main() { int L = 3, R = 15; cout<<"Sum of elements of array from index "<<L<<" to "<<R<<" is "<<CalcArrSumLtoR(L, R); return 0; }
आउटपुट
Sum of elements of array from index 3 to 15 is -9