সমস্যা বিবৃতি
পূর্ণসংখ্যার একটি অ্যারে, একটি সংখ্যা এবং একটি সর্বাধিক মান দেওয়া, কাজটি হল অ্যারের উপাদানগুলি থেকে প্রাপ্ত সর্বাধিক মান গণনা করা। শুরু থেকে ট্র্যাভার্সিং অ্যারের প্রতিটি মান পূর্ববর্তী সূচক থেকে প্রাপ্ত ফলাফলের সাথে যোগ বা বিয়োগ করা যেতে পারে যেমন যে কোনও সময়ে ফলাফলটি 0-এর কম নয় এবং প্রদত্ত সর্বোচ্চ মানের চেয়ে বেশি নয়। সূচক 0 এর জন্য প্রদত্ত সংখ্যার সমান পূর্ববর্তী ফলাফল নিন। কোন সম্ভাব্য উত্তর প্রিন্ট-1.
ক্ষেত্রেযদি arr[] ={3, 10, 6, 4, 5}, সংখ্যা =1 এবং সর্বোচ্চ মান =15 তাহলে আউটপুট হবে 9 যদি নিচের যোগ ও বিয়োগের ক্রম অনুসরণ করা হয় -
1 + 3 + 10 – 6 – 4 + 5
অ্যালগরিদম
এই সমস্যাটি সমাধান করার জন্য আমরা একটি পুনরাবৃত্তিমূলক পদ্ধতি ব্যবহার করতে পারি
<পূর্ব>1. প্রতিটি সূচক অবস্থানে দুটি পছন্দ রয়েছে, হয় পূর্ববর্তী উপাদানগুলি থেকে প্রাপ্ত মান থেকে বর্তমান অ্যারে উপাদান যোগ করুন বা পূর্ববর্তী উপাদানগুলি থেকে এতদূর প্রাপ্ত মান থেকে বর্তমান অ্যারে উপাদান বিয়োগ করুন। সূচক 0 থেকে শুরু করুন, প্রদত্ত নম্বর থেকে arr[0] যোগ বা বিয়োগ করুন এবং আপডেট হওয়া নম্বর 3 সহ পরবর্তী সূচকের জন্য বারবার কল করুন। যখন সম্পূর্ণ অ্যারে অতিক্রম করা হয়, তখন পর্যন্ত প্রাপ্ত সংখ্যার সামগ্রিক সর্বোচ্চ মানের সাথে আপডেট হওয়া সংখ্যার তুলনা করুনউদাহরণ
#includeনেমস্পেস ব্যবহার করে std;void getMaxValue(int *arr, int n, int num, int maxLimit, intidx, int&result){ if (idx ==n) { ফলাফল =সর্বোচ্চ( ফলাফল, সংখ্যা); প্রত্যাবর্তন } যদি (সংখ্যা - arr[idx]>=0) { getMaxValue(arr, n, num - arr[idx], maxLimit, idx + 1, ফলাফল); } যদি (num + arr[idx] <=maxLimit) { getMaxValue(arr, n, num + arr[idx], maxLimit, idx + 1, ফলাফল); }}int getMaxValue(int *arr, int n, int num, int maxLimit){ int ফলাফল =0; int idx =0; getMaxValue(arr, n, num, maxLimit, idx, ফলাফল); রিটার্ন ফলাফল;}int main(){int num =1; int arr[] ={3, 10, 6, 4, 5}; int n =sizeof(arr) / sizeof(arr[0]); int maxLimit =15; cout <<"সর্বোচ্চ মান =" < আউটপুট
আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট-
তৈরি করেসর্বোচ্চ মান =9