এই আর্টিকেলে আমরা x+y+z<=n সমীকরণের সমাধান সংখ্যা বের করার পদ্ধতি ব্যাখ্যা করব। এই সমস্যায় চারটি ভেরিয়েবলসহ একটি সমীকরণ আছে, এবং কাজ হল দিয়ে गये সমীকরণের সমাধান বের করা। এখানে একটি সহজ উদাহরণ:
ইনপুট: X = 1, Y = 1, Z = 1, n = 1 আউটপুট: 4 ইনপুট: X = 1, Y = 2, Z = 3, n = 4 আউটপুট: 3
এই সমস্যায় আমরা সহজে (x,y), (y,z), (x,z)-এর সকল সম্ভাব্য মান traverser করে আলাদা করে প্রতিটি ভেরিয়েবল চেক করতে পারি যে সমীকরণ সন্তুষ্ট করে কিনা।
সমাধানের পদ্ধতি
এখন আমরা ব্রুট ফোর্স পদ্ধতি ব্যবহার করে সমাধান বের করব।
ব্রুট ফোর্স
এই প্রোগ্রামে আমরা (x,y), (y,z) এবং (x,z)-এর সকল সম্ভাব্য মান traverser করব যাতে সমীকরণ z <= n - x - y (এখানে z আলাদা করা হয়েছে) সন্তুষ্ট হয় যেখানে 0 <= z <= Z (এবং অন্যান্য আলাদা করা ভেরিয়েবলসহ একই শর্ত)।
উদাহরণ
#include<bits/stdc++.h> using namespace std; int main(){ int X = 1, Y = 2, Z = 3, n = 4; // x, y, z-এর লিমিট এবং দেওয়া n int answer = 0; // কাউন্টার ভেরিয়েবল for(int i = 0; i <= X; i++){ for(int j = 0; j <= Y; j++){ int temp = (n - i) - j; // temp = n - x - y if(temp >= Z){ // যদি n - x - y >= z হয় তবে answer বাড়াও answer++; } } } for(int i = 0; i <= X; i++){ for(int j = 0; j <= Z; j++){ int temp = (n - i) - j; // temp = n - x - y if(temp >= Y){ // যদি n - x - y >= z হয় তবে answer বাড়াও answer++; } } } for(int i = 0; i <= Z; i++){ for(int j = 0; j <= Y; j++){ int temp = (n - i) - j; // temp = n - x - y if(temp >= X){ // যদি n - x - y >= z হয় তবে answer বাড়াও answer++; } } } cout << answer << "\n"; }
আউটপুট
17
উপরোক্ত প্রোগ্রামের ব্যাখ্যা
এই প্রোগ্রামে আমরা নেস্টেড ফর লুপ ব্যবহার করে (x,y), (y,z), (x,z)-এর সকল কম্বিনেশন traverser করি এবং সমীকরণ চেক করি সন্তুষ্ট হয় কিনা, সন্তুষ্ট হলে answer বাড়াই।
উপসংহার
এই আর্টিকেলে আমরা O(X*Y) সময় জটিলতায় x + y + z <= n সমীকরণ সন্তুষ্ট করে সমাধান সংখ্যা বের করার সমস্যা সমাধান করেছি। আমরা এই সমস্যার জন্য C++ প্রোগ্রাম এবং সমাধানের পূর্ণ পদ্ধতি শিখেছি। একই প্রোগ্রাম C, Java, Python বা অন্য ভাষায় লেখা যায়।