কম্পিউটার

ন্যূনতম যোগফল নির্ণয় করুন যাতে প্রতি তিনটি পরপর উপাদানের একটি C++ এ নেওয়া হয়


ধরুন আমাদের n উপাদানের একটি অ্যারে আছে। কাজটি হল অ্যারে থেকে উপাদানগুলির ন্যূনতম যোগফল খুঁজে বের করা। যে অ্যারেতে প্রতি তিনটি ধারাবাহিক উপাদানের মধ্যে অন্তত একটি উপাদান একটি উপাদান বাছাই করা হয়। সুতরাং যদি অ্যারের মত হয় [1, 2, 3, 6, 7, 1]। আউটপুট হল 4। তাই যদি আমরা 3 এবং 1 বাছাই করি, তাহলে (3 + 1 =4)। তাই ধারাবাহিক উপাদানের কিছু সাবঅ্যারে আছে যেমন [1, 2, 3], [2, 3, 6], [3, 6, 7], [6, 7, 1], আমরা প্রতিটি সাবঅ্যারে থেকে একটি উপাদান বেছে নিয়েছি।

বিবেচনা করুন যোগফল(i) ন্যূনতম সম্ভাব্য যোগফল প্রদান করবে, যেখানে arr[i] হল সমাধানের অংশ এবং সর্বশেষ বাছাই করা উপাদান। তারপরে আমাদের ফলাফল হল ন্যূনতম যোগফল(i – 1), যোগফল(i – 2), যোগফল(i – 3)। যেহেতু আমরা দেখতে পাচ্ছি যে এতে ওভারল্যাপিং সাব-প্রবলেম রয়েছে, তাহলে আমরা এটি সমাধান করতে ডায়নামিক প্রোগ্রামিং পদ্ধতি ব্যবহার করতে পারি।

উদাহরণ

#include <iostream>
using namespace std;
int minOfThree(int a, int b, int c) {
   return min(min(a, b), c);
}
int getMinSum(int arr[], int n) {
   int sum[n];
   sum[0] = arr[0];
   sum[1] = arr[1];
   sum[2] = arr[2];
   for (int i=3; i<n; i++)
   sum[i] = arr[i] + minOfThree(sum[i-3], sum[i-2], sum[i-1]);
   return minOfThree(sum[n-1], sum[n-2], sum[n-3]);
}
int main() {
   int arr[] = {1, 2, 3, 20, 2, 10, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Minimum sum is: " << getMinSum(arr, n);
}

আউটপুট

Minimum sum is: 4

  1. বৃত্তাকার অ্যারেতে সর্বাধিক যোগফল যাতে C++ এ দুটি উপাদান সংলগ্ন থাকে না

  2. সি++ ব্যবহার করে সংখ্যাগুলি প্রিন্ট করার প্রোগ্রাম যাতে পরপর দুটি সংখ্যা সহ-প্রধান নয় এবং প্রতি তিনটি পরপর সংখ্যা সহ-প্রধান হয়

  3. অ্যারেতে এমন একটি উপাদান খুঁজুন যাতে বাম অ্যারের যোগফল c++ ব্যবহার করে ডান অ্যারের যোগফলের সমান হয়

  4. x এর সমষ্টি এবং এর সংখ্যা C++ এ দেওয়া n-এর সমান