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

C++-এ ক্লোসেস্ট ডিভাইজারস (Closest Divisors) সমস্যা সমাধান


ধরুন আমাদের একটি ইন্টিজার num আছে। আমাদের দুটি ইন্টিজার খুঁজে বের করতে হবে যেসবির অ্যাবসোলিউট ডিফারেন্স ন্যূনতম এবং যেসবির গুণফল num + 1 বা num + 2-এর সমান। দুটি ইন্টিজার যেকোনো অর্ডারে রিটার্ন করুন। ইনপুট 8 হলে আউটপুট [3, 3], কারণ num + 1 = 9, এর ক্লোসেস্ট ডিভাইজার 3 এবং 3; num + 2 = 10, এর ক্লোসেস্ট ডিভাইজার 2 এবং 5, তাই 3 এবং 3 বেছে নেওয়া হয়।

সমাধানের ধাপগুলো:

  • getDiv() মেথড ডিফাইন করুন, যা x ইনপুট নেবে

  • diff := ইনফিনিটি, সাইজ ২-এর একটি ret অ্যারে তৈরি করুন

  • i = 1 থেকে i^2 <= x পর্যন্ত লুপ চালান, i ১ বাড়াতে

    • যদি x i-দিয়ে বিভাজ্য হয়

      • a := i

      • b := x / i

      • newDiff := |a – b|

      • যদি newDiff < diff হয়, তবে

        • diff := newDiff

        • ret[0] := a এবং ret[1] := b

  • ret রিটার্ন করুন

  • মেইন মেথড থেকে op1 := getDiv(num + 1) এবং op2 := getDiv(num + 2) বের করুন

  • যদি |op1[0] – op1[1]| <= |op2[0] – op2[1]| হয়, তবে op1 রিটার্ন করুন, অন্যথায় op2

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution { public:    vector <int> getDiv(int x){       int diff = INT_MAX;       vector <int> ret(2);       for(int i = 1; i * i <= x; i++){          if(x % i == 0){             int a = i;             int b = x / i;             int newDiff = abs(a - b);             if(newDiff < diff){                diff = newDiff;                ret[0] = a;                ret[1] = b;             }          }       }       return ret;    }    vector<int> closestDivisors(int num) {       vector <int> op1 = getDiv(num + 1);       vector <int> op2 = getDiv(num + 2);       return abs(op1[0] - op1[1]) <= abs(op2[0] - op2[1]) ? op1 : op2;    } }; main(){    Solution ob;    print_vector(ob.closestDivisors(8)); }

ইনপুট

8

আউটপুট

[3,3]
  1. C++-এ n-এর সব dzielন করলে সর্বোচ্চ ডিজিট সম কোনটি?

  2. সি++-এ ম্যাট্রিক্সের ডিটারমিন্যান্ট

  3. C++-এ Range Addition: অ্যারে রেঞ্জ আপডেট দিয়ে মডিফাইড অ্যারে বের করা

  4. C++-এ Line Reflection: ২D প্লেনে বিন্দুগুলোর Y-অক্ষ সমান্তরাল প্রতিফলন লাইন আছে কিনা যাচাই করা