আমাদের একটি ক্যান্ডি অ্যারে দেওয়া আছে candies[] যার লেঙ্গ্থ size ভেরিয়েবলে সংরক্ষিত। প্রতিটি candies[i] টাইপ-i ক্যান্ডির সংখ্যা নির্দেশ করে। লক্ষ্য হলো যেকোনো টাকার জন্য সর্বোচ্চ কতগুলো ক্যান্ডি কেনা যায়। শর্তাবলী নিচে দেওয়া হলো:
যদি আপনি টাইপ-i-এর X[i] সংখ্যক ক্যান্ডি কেনেন (0 <= X[i] <= candies[i]), তবে সমস্ত j (1 <= j <= i) এর জন্য নিচের শর্তগুলোর কমপক্ষে একটি সত্য হতে হবে:
X[j] < X[i](টাইপ-jক্যান্ডি টাইপ-iক্যান্ডির চেয়ে কম কেনা হয়েছে)X[j] = 0(টাইপ-jক্যান্ডি কেনা হয়নি)
উদাহরণ ১
ইনপুট: Arr[] = {1, 3, 5, 2, 6, 7}
আউটপুট: সর্বোচ্চ ক্যান্ডি কেনা যায় - ১৬
ব্যাখ্যা: কেনা ক্যান্ডি {0, 3, 5, 2, 6, 0}
উদাহরণ ২
ইনপুট: Arr[] = {5, 7, 7, 3, 4}
আউটপুট: সর্বোচ্চ ক্যান্ডি কেনা যায় - ১০
ব্যাখ্যা: কেনা ক্যান্ডি {0, 0, 7, 3, 0}
প্রোগ্রামে ব্যবহৃত পদ্ধতি
- ইন্টিজার অ্যারে
candies[]টাইপ-iক্যান্ডির সংখ্যা স্টোর করে। - ভেরিয়েবল
sizeঅ্যারের লেঙ্গ্থ স্টোর করে। maxCandies(int arr[], int n)ফাংশন কেনা যাওয়া ক্যান্ডির মোট সংখ্যা রিটার্ন করে।- প্রথমে ধরে নেওয়া হয় শেষ টাইপের ক্যান্ডি কেনা হয়েছে:
bought = arr[n-1]। - দ্বিতীয় শেষ এলিমেন্ট থেকে শুরু করে লুপ:
for(i=n-2; i>=0; i--)। - ভেরিয়েবল
xবর্তমান টাইপের কেনা যাওয়া ক্যান্ডির সংখ্যা:x = min(arr[i], bought-1)। xনন-জিরো হলে টোটালে যোগ করা হয়।- টোটাল প্রিভাস
boughtথেকে বড় হলেbought = xআপডেট করা হয়। - ফলাফল রিটার্ন করা হয়।
উদাহরণ কোড
#include <stdio.h>
int maxCandies(int arr[], int n) {
int bought = arr[n - 1];
int total = bought;
// দ্বিতীয় শেষ এলিমেন্ট থেকে শুরু
for (int i = n - 2; i >= 0; i--) {
// বর্তমান টাইপের কেনা যাওয়া ক্যান্ডির পরিমাণ
int x = arr[i] < bought - 1 ? arr[i] : bought - 1;
if (x >= 0) {
total += x;
bought = x;
}
}
return total;
}
int main() {
int candies[] = {1, 2, 4, 3, 7};
int size = 5;
printf("কেনা যাওয়া মোট ক্যান্ডি: %d", maxCandies(candies, size));
return 0;
}
আউটপুট
কেনা যাওয়া মোট ক্যান্ডি: 13