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

C++-এ প্রথম তিনটি পদ AP এবং শেষ তিনটি পদ GP वाले কোয়াড্রুপলেট সংখ্যা বের করুন


এই আর্টিকেলে আমরা ওই কোয়াড্রুপলেট (চারটি সংখ্যা) সংখ্যা বের করার সকল সম্ভাব্য পদ্ধতি বর্ণনা করব যেখানে প্রথম ৩টি পদ অंकগণিতিকسلسل (A.P.)-এ এবং শেষ ৩টি পদ জ্যামিতিকسلسل (G.P.)-এ থাকে। প্রথমে আমরা A.P. এবং G.P.-এর মৌলিক সংজ্ঞা ব্যাখ্যা করব।

অঙ্কগণিতিকسلسل (A.P.) − এটি একটি সংখ্যা সিকোয়েন্স যেখানে কমন ডিফারেন্স (d) একই বা কনস্ট্যান্ট থাকে অর্থাৎ দুটি последователь সংখ্যার পার্থক্য কনস্ট্যান্ট। উদাহরণ: 1,3,5,7,9 | d = 2

জ্যামিতিকسلسل (G.P.) − এটি একটি সংখ্যা সিকোয়েন্স যেখানে কমন রেশিও (r) একই থাকে অর্থাৎ প্রতিটি পদ পূর্ববর্তী সংখ্যাকে একটি নির্দিষ্ট সংখ্যা দিয়ে গুণ করে পাওয়া যায়। উদাহরণ: 3, 6, 12, 24,.... | r = 2

এই সমস্যায় আমাদের বের করতে হবে একটি অ্যারে arr[ ]-এ N পূর্ণসংখ্যা থেকে কতগুলো ইনডেক্স কোয়াড্রুপলেট (a, b, c, d) আছে। ফলে arr[a], arr[b], arr[c] A.P.-এ থাকবে, এবং arr[d], arr[c], arr[b] G.P.-এ থাকবে যেখানে সব কোয়াড্রুপলেট ডিফিনিট হবে। উদাহরণ:

ইনপুট : arr[ ] = { 9, 6, 4, 2, 1, 2 }
আউটপুট : 2
ব্যাখ্যা: কোয়াড্রুপলেটের এলিমেন্টগুলো { 3, 2, 1, 0 } এবং { 5, 2, 1, 0 } ইনডেক্সে যেখানে কোয়াড্রুপলেট { 2, 4, 6, 9 } উভয় পজিশনে।
ইনপুট : arr[ ] = { 2, 6, 1, 4, 2 }
আউটপুট : 2
ব্যাখ্যা: কোয়াড্রুপলেটের এলিমেন্টগুলো { 1, 3, 0, 2 } এবং { 1, 3, 4, 2 } ইনডেক্সে যেখানে কোয়াড্রুপলেট { 6, 4, 2, 1 } উভয় পজিশনে।

সমাধানের পদ্ধতি

এখন আমরা সমাধান বের করার দুটি ভিন্ন পদ্ধতি বর্ণনা করব:

ব্রুট ফোর্স পদ্ধতি

এটি চারটি নেস্টেড লুপ ব্যবহার করে এই সমস্যা সমাধানের সহজ পদ্ধতি, তারপর চেক করা হয় প্রথম তিনটি এলিমেন্ট A.P.-এ আছে কিনা। হ্যাঁ হলে চেক করা হয় শেষ ৩টি এলিমেন্ট G.P.-এ আছে কিনা। হ্যাঁ হলে কাউন্ট ভেরিয়েবল ১ বাড়ানো হয়। তবে এই পদ্ধতি সময় সাপেক্ষ কারণ এর সময় জটিলতা O(n⁴)।

দক্ষ পদ্ধতি (Efficient Approach)

এই পদ্ধতিতে আমরা প্রথমে প্রতিটি অ্যারে এলিমেন্টের কাউন্ট বের করি, তারপর দ্বিতীয় এবং তৃতীয় এলিমেন্ট ধরে দুইটি নেস্টেড লুপ চালাই, তখন প্রথম এলিমেন্ট হবে arr[b] – (arr[c] – arr[b]) এবং চতুর্থ এলিমেন্ট হবে arr[c] * arr[c] / arr[b]।

উদাহরণ

#include <bits/stdc++.h> using namespace std; int main (){     unordered_map < int, int > map;     int arr[] = { 2, 6, 1, 4, 2 };     int size = sizeof (arr) / sizeof (arr[0]);     // প্রতিটি এলিমেন্ট প্রসেস করে কাউন্ট বাড়ানো     for (int a = 0; a < size; a++)       map[arr[a]]++;     int count = 0;     // দ্বিতীয় ও তৃতীয় এলিমেন্টের জন্য দুইটি নেস্টেড লুপ     for (int b = 0; b < size; b++){         for (int c = 0; c < size; c++){             if (b == c)                 continue;             // কাউন্ট কমানো             map[arr[b]]--;             map[arr[c]]--;             // কমন ডিফারেন্স ব্যবহার করে প্রথম এলিমেন্ট বের করা             int first = arr[b] - (arr[c] - arr[b]);             // GP ব্যবহার করে চতুর্থ এলিমেন্ট বের করা             int fourth = (arr[c] * arr[c]) / arr[b];             if ((arr[c] * arr[c]) % arr[b] == 0){                 // बरাবর না হলে কাউন্ট বাড়াও                 if (arr[b] != arr[c])                     count += map[first] * map[fourth];                 else                   count += map[first] * (map[fourth] - 1);             }             map[arr[b]]++;             map[arr[c]]++;         }     }     cout <<"Number of quadruples: " << count;     return 0; }

আউটপুট

Number of quadruples: 2

উপরোক্ত কোডের ব্যাখ্যা

এই কোডে আমরা কম্বিনেটরিক্স ব্যবহার করি এবং দ্বিতীয় ও তৃতীয় এলিমেন্টের জন্য দুইটি নেস্টেড লুপ চালিয়ে প্রথম এলিমেন্ট arr[a] – (arr[c] – arr[b]) এবং চতুর্থ এলিমেন্ট arr[c] * arr[c] / arr[b] দিয়ে বের করি। তাই A এবং B ইনডেক্স দ্বারা কোয়াড্রুপলেট সংখ্যা হবে প্রথম সংখ্যা * চতুর্থ সংখ্যা, দ্বিতীয় ও তৃতীয় এলিমেন্ট ফিক্স রেখে। এখানে উপরের কোডের সময় জটিলতা O(n²)।

উপসংহার

এই আর্টিকেলে আমরা সমাধান করেছি যেখানে প্রথম তিনটি পদ AP-এ এবং শেষ তিনটি পদ GP-এ থাকে এমন কোয়াড্রুপলেট সংখ্যা বের করা, এবং দুটি পদ্ধতি আলোচনা করেছি ব্রুটফোর্স [O(n⁴)] এবং দক্ষ পদ্ধতি [O(n²)]।

আমরা এই সমস্যাটি C++-এ সমাধান করেছি, এবং এটি Java, Python, C বা অন্য প্রোগ্রামিং ভাষায়ও সমাধান করা যায়।


  1. C++ ব্যবহার করে পেন্টাগোনাল পিরামিডাল সংখ্যা নির্ণয় করুন

  2. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  3. C++-এ ট্রেন স্টপেজ স্টেশন সংখ্যা বের করুন

  4. C++-এ ফুটবলে পেন্টাগন এবং হেক্সাগন সংখ্যা বের করুন