সমস্যা বিবরণ
একটি অ্যারে দেওয়া আছে, আমাদের অ্যারে মানগুলো দিয়ে একটি ত্রিভুজ তৈরি করতে হবে যাতে প্রতিটি (i+1)-তম লেভেলে আগের লেভেলের চেয়ে বেশি উপাদান এবং বড় যোগফল থাকে। আমাদের এমন ত্রিভুজের সর্বোচ্চ উচ্চতা বের করতে হবে।
উদাহরণ
ইনপুট অ্যারে যদি {40, 100, 20, 30 } হয়, তবে উত্তর হবে ২ কারণ −
নিচের লেভেলে 100 এবং 20 রাখা যায় এবং উপরের লেভেলে 40 বা 30 যেকোনো একটি রাখা যায়।
অ্যালগরিদম
আমাদের সমাধান শুধু এই লজিকের ওপর ভিত্তি করে যে যদি আমাদের পিরামিডের জন্য সর্বোচ্চ উচ্চতা h সম্ভব হয়, তবে ( h * (h + 1) ) / 2 টি উপাদান অবশ্যই অ্যারেতে থাকতে হবে।
উদাহরণ
#include <bits/stdc++.h> using namespace std; int getMaximumHeight(int *arr, int n) { int result = 1; for (int i = 1; i <= n; ++i) { long long y = (i * (i + 1)) / 2; if (y < n) { result = i; } else { break; } } return result; } int main() { int arr[] = {40, 100, 20, 30}; int n = sizeof(arr) / sizeof(arr[0]); cout << "Result = " << getMaximumHeight(arr, n) << endl; return 0; }আউটপুট
প্রোগ্রামটি কম্পাইল ও এক্সিকিউট করলে নিচের আউটপুট পাওয়া যাবে −
Result = 2