কম্পিউটার টিউটোরিয়াল

C++-এ মিউটেটেড অ্যারে যোগফল টার্গেটের নিকটতম


ধরুন আমাদের একটি পূর্ণসংখ্যা অ্যারে arr এবং একটি টার্গেট মান target আছে, আমাদের একটি পূর্ণসংখ্যা মান বের করতে হবে যাতে যখন আমরা দেওয়া অ্যারেতে value-এর চেয়ে বড় সব পূর্ণসংখ্যাকে value-এর সমান করি, অ্যারেটির যোগফল target-এর যতটা সম্ভব নিকট হয়। যদি তারা সমান হয়, তবে ন্যূনতম এমন পূর্ণসংখ্যা ফেরত দিন। তাই যদি অ্যারেটি হয় [4,9,3] এবং target 10 হয়, তবে আউটপুট হবে 3 কারণ 3 ব্যবহার করলে অ্যারে হবে [3,3,3], তাই যোগফল 9, যা 10-এর নিকটতম উপাদান।

এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব −

  • n := অ্যারেতে আকার, avg := total / n, sum := 0 এবং cnt := 0 সেট করুন
  • i = 0 থেকে n – ১ পর্যন্ত
    • যদি arr[i] <= avg, তবে sum := sum + arr[i], এবং cnt ১ বৃদ্ধি করুন
  • যদি target – sum = 0, তবে avg ফেরত দিন
  • high := (target - sum) / (n - cnt)-এর ceiing
  • low := (target - sum) / (n - cnt)-এর floor
  • lowDiff := |target – (low*(n - cnt) + sum)|
  • highDiff := |target – (high*(n - cnt) + sum)|
  • যদি lowDiff <= highDiff, তবে low ফেরত দিন
  • high ফেরত দিন।

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন −

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int findBestValue(vector<int>& arr, int target) {       int n = arr.size();       int avg = target / n;       int sum = 0;       int cnt = 0;       for(int i = 0; i < n; i++){          if(arr[i] <= avg){             sum += arr[i];             cnt++;          }       }       if(target - sum == 0)return avg;       int high = ceil(((target - sum) * 1.0)/ ((n - cnt) * 1.0));       int low = floor(((target - sum) * 1.0) / ((n - cnt) * 1.0));       int lowDiff = abs(target - (low * (n - cnt) + sum));       int highDiff = abs(target - (high * (n - cnt) + sum));       if( lowDiff <= highDiff)return low;       return high;    } }; main(){    vector<int> v = {4,9,3,2};    Solution ob;    cout << (ob.findBestValue(v, 10)); }

ইনপুট

[4,9,3,2] 10

আউটপুট

3

  1. C++ STL-এ অ্যারে যোগফল (Array Sum)

  2. C++ সম অ্যারে পাজল (Sum Array Puzzle)

  3. C++-এ সম অ্যারে পাজল (Sum Array Puzzle) সমাধান

  4. C++-এ পয়েন্টার অর্থমেটিক ব্যবহার করে অ্যারে সমষ্টি বের করা