আমাদেরকে ধনাত্মক এবং ঋণাত্মক পূর্ণসংখ্যার একটি অ্যারে এবং একটি সংখ্যা K দেওয়া হয়েছে। কাজটি হল K এর উপাদানগুলিতে পরিবর্তনের পরে অ্যারের সর্বাধিক যোগফল খুঁজে বের করা। এখানে একক পরিবর্তন অপারেশন একক উপাদানকে -1 দ্বারা গুণ করে।
প্রতিটি নেতিবাচক সংখ্যাকে ধনাত্মক তে রূপান্তর করতে ব্যবহৃত পদ্ধতি হবে। যদি N ঋণাত্মক সংখ্যা থাকে, তাহলে এর জন্য আমরা অ্যারে −
সাজাব-
যদি N
-
এখন যদি K-N হয় তবে বাকি K-N অপারেশনগুলির জন্য পরিবর্তনের লক্ষণগুলির কোনও প্রভাব থাকবে না, কিছুই করবেন না৷
-
যদি K-N বিজোড় হয় তবে অবশিষ্ট K-N ক্রিয়াকলাপগুলির জন্য সর্বনিম্ন সংখ্যার চিহ্ন পরিবর্তন করুন (যা ঋণাত্মক হবে) তবে সামগ্রিক যোগফল সর্বাধিক হবে৷
অথবা
যদি N>K তাহলে K ঋণাত্মক সংখ্যার চিহ্ন পরিবর্তন করে অ্যারে যোগ করুন। যোগফল সর্বোচ্চ হবে।
ইনপুট
Arr[]={ 0,-2,6,4,8,2,-3 } K=4
আউটপুট
সর্বোচ্চ অ্যারের যোগফল হল :25
ব্যাখ্যা − উপাদানের 4টি পরিবর্তন হল
<পূর্ব>1. 0,2,6,4,8,2,-3 -2 পরিবর্তিত হয়েছে 22। 0,2,6,4,8,2,3 -3 পরিবর্তিত হয়েছে 33। 0,-2,6,4,8, 2,3 2 পরিবর্তিত হয়েছে -24। 0,2,6,4,8,2,3 -2 2এ পরিবর্তিত হয়েছে সর্বাধিক যোগফল 25ইনপুট
Arr[]={ -1,-2,-3,-4,-5,-6,-7 } K=4
আউটপুট
সর্বাধিক অ্যারের যোগফল হল :16
ব্যাখ্যা − উপাদানের 4টি পরিবর্তন হল
<পূর্ব>1. -1, -2, -3, -4, -5, -6,7 -7 72 এ পরিবর্তিত হয়েছে। -1, -2, -3, -4, -5,6,7 -6 63 এ পরিবর্তিত হয়েছে। - 1,-2,-3,-4,5,6,7 -5 54 এ পরিবর্তিত হয়েছে। -1,-2,-3,4,5,6,7 -4 4এ পরিবর্তিত হয়েছে সর্বাধিক যোগফল 16নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
পূর্ণসংখ্যা অ্যারে Arr[] পূর্ণসংখ্যা সংরক্ষণ করতে ব্যবহৃত হয়।
-
পূর্ণসংখ্যা 'আকার' অ্যারের দৈর্ঘ্য সঞ্চয় করে এবং K আরম্ভ করা হয়।
-
ফাংশন রিটার্নসাম(int arr[], int n, int k) একটি অ্যারে নেয়, এর আকার এবং k ইনপুট হিসাবে এবং ঠিক k অপারেশনের পরে এটির উপাদানগুলির সর্বাধিক যোগফল ফেরত দেয়৷
-
প্রথমে আমরা sort(arr,arr+n)
ব্যবহার করে অ্যারে সাজাব -
এখন আমরা সমস্ত নেতিবাচক উপাদানগুলিতে অপারেশন arr[i]*-1 প্রয়োগ করব যতক্ষণ না হয় শেষ সূচকে পৌঁছায় বা k 0 হয়ে যায়।
-
যদি k নেতিবাচক উপাদানের সংখ্যা থেকে ছোট হয়, তাহলে উপরের ধাপটি k -ve উপাদানগুলিকে পরিবর্তন করবে।
-
k বড় হলে এবং k-এর অবশিষ্ট মানটি বিজোড় বা জোড় কিনা তা পরীক্ষা করা হবে।
-
যদি অবশিষ্ট k বিজোড় হয় তবে আমরা ন্যূনতম উপাদানের মান পরিবর্তন করব অপারেশন arr[i]*-1 প্রয়োগ করে, যেখানে অন্ততপক্ষে arr[i] পাওয়া যায়। ( -1 বিজোড় বার দ্বারা গুণ করা একবার করার সমান)
-
যদি অবশিষ্ট k হয় তাহলে arr[i]*-1 কোন প্রভাব ফেলবে না। কিছুই করবেন না।
-
পুরো অ্যারের যোগফল গণনা করুন এবং ফলাফল ফেরত দিন।
উদাহরণ
#includeনেমস্পেস ব্যবহার করে std;int returnSum(int arr[], int n, int k){ // অ্যারের উপাদানগুলি সাজান (arr, arr + n); // নেতিবাচক উপাদানগুলির চিহ্ন পরিবর্তন করুন // ক্ষুদ্রতম থেকে শুরু করে // এই লুপটি -ve উপাদানগুলির চিহ্ন পরিবর্তন করবে // প্রতিটি k একটি -ve উপাদানের জন্য ধনাত্মক হয়ে গেছে (i=0;i 0 &&arr[i]<0){ arr[i]=arr[i]*-1; k--;}//যদি k শূন্য নয় এবং ন্যূনতম উপাদানের বিজোড় পরিবর্তনের চিহ্ন//একবার এটি তার চিহ্নের বিজোড় বার পরিবর্তনের মতই হয় (k % 2 ==1) { int min =arr[0]; int pos=0; // (i =1; i আউটপুট
সর্বোচ্চ অ্যারের যোগফল যা ঠিক k পরিবর্তনের পরে পাওয়া যেতে পারে :24