কম্পিউটার

একটি অ্যারেতে সূচক L থেকে R থেকে উপাদানগুলির যোগফল যখন arr[i] =i * (-1)^i C++ এ


এই সমস্যায়, আমাদের দুটি সংখ্যা দেওয়া হয়েছে L এবং R। আমাদের একটি অ্যারে অ্যারে [] যেমন arr[i] =i*(-1)^i আছে। . আমাদের কাজ হল একটি অ্যারেতে সূচক L থেকে R পর্যন্ত উপাদানের যোগফল গণনা করার জন্য একটি প্রোগ্রাম তৈরি করা যখন 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

  1. C++ এ একই সূচকে এলিমেন্ট ছাড়া অ্যারের সমস্ত উপাদানের XOR থেকে একটি অ্যারে তৈরি করুন

  2. C++ এ STL ব্যবহার করে একটি অ্যারের উপাদানের যোগফল কিভাবে খুঁজে পাওয়া যায়?

  3. C++ ব্যবহার করে এনক্রিপ্ট করা অ্যারে (অন্যান্য উপাদানের যোগফলের অ্যারে) থেকে আসল অ্যারে খুঁজুন।

  4. C++ অ্যারের সমস্ত উপাদানে XOR অপারেশন প্রয়োগ করে অ্যারের যোগফলকে মিনিমাইজ করা