আমাদের কাগজের শীটের মাত্রা দেওয়া হয়েছে, এটির দৈর্ঘ্য L, এবং প্রস্থ B। এছাড়াও, আমাদেরকে একটি ছোট আয়তক্ষেত্রের মাত্রা দেওয়া হয়েছে, এটির দৈর্ঘ্য l এবং প্রস্থ b। লক্ষ্য হল কাগজের একটি শীট থেকে কাটা যায় এমন সর্বাধিক সংখ্যক ছোট আয়তক্ষেত্র খুঁজে বের করা।
আমরা নিম্নলিখিত পদক্ষেপগুলি করব -
-
প্রথমত, আমরা শীট এবং আয়তক্ষেত্রের যথাক্রমে অনুভূমিক প্রান্তিককরণ, দৈর্ঘ্য L এবং l নেব। L দ্বারা l এবং B দ্বারা b সারিবদ্ধ করা শুরু করুন এবং আয়তক্ষেত্রগুলি গণনা করুন।
-
তারপর উল্লম্ব প্রান্তিককরণেও একই কাজ করুন। আবার গুনুন। গণনার সর্বোচ্চ মান ফেরত দিন।
আসুন একটি উদাহরণ দিয়ে বুঝতে পারি।
ইনপুট৷
Sheet L=18, B=6 Rectangle l=4, b=3
আউটপুট
Maximum rectangles: 8
ব্যাখ্যা
Horizontal 18/4=4 6/3=2 2*4=8 rectangles possible Vertical 18/3=6 6/4=1 6*1=6 rectangles possible Maximum rectangles here is 8
ইনপুট
Sheet L=10, B=6 Rectangle l=4, b=2
আউটপুট
Maximum rectangles: 6
ব্যাখ্যা
Horizontal 10/4=2 6/2=3 2*3=6 rectangles possible Vertical 10/2=5 6/4=1 5*1=5 rectangles possible Maximum rectangles here is 6
নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি
-
ভেরিয়েবল দৈর্ঘ্য এবং প্রস্থ শীটের মাত্রা সংরক্ষণ করতে ব্যবহৃত হয়।
-
ভেরিয়েবল len এবং bre আয়তক্ষেত্রের মাত্রা সংরক্ষণ করতে ব্যবহৃত হয়।
-
ফাংশন maxRectangles (int L, int B, int l, int b) শীট এবং আয়তক্ষেত্রের মাত্রা নেয় এবং সম্ভাব্য সর্বাধিক আয়তক্ষেত্র প্রদান করে।
-
numh এবং numv ভেরিয়েবলগুলি অনুভূমিকভাবে এবং উল্লম্বভাবে কাটা যায় এমন আয়তক্ষেত্রের সংখ্যা সংরক্ষণ করতে ব্যবহৃত হয়৷
-
অনুভূমিকভাবে, ভাগ করুন cols=L/l এবং rows=B/b, আয়তক্ষেত্রগুলি সম্ভব, numh=cols*সারি।
-
উল্লম্বভাবে, ভাগ করুন cols=L/b এবং সারি=B/l, আয়তক্ষেত্রগুলি সম্ভব, numv=cols*সারি।
-
উপরের দুটি ধাপে numh বা numv প্রাপ্ত ফলাফল হিসাবে সর্বাধিক মান ফেরত দিন।
উদাহরণ
#include <stdio.h> int maxRectangles (int L, int B, int l, int b){ int numh = 0, numv = 0; // Cut rectangles horizontally if possible if (l <= L && b <= B){ // One rectangle is a single cell int cols = B / b; int rows = L / l; // Total rectangles = total cells numh = rows * cols; } // Cut rectangles vertically if possible if (l <= B && b <= L){ int cols = L / b; int rows = B / l; numv = rows * cols; } // Return the maximum possible rectangles return numh>numv?numh:numv; } // Driver code int main (){ int Length = 18; int Breadth =6; int len = 4, bre = 3; printf("Maximum rectangles: %d",maxRectangles(Length,Breadth,len,bre)); return 0; }
আউটপুট
যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট −
উৎপন্ন করবেMaximum given sized rectangles that can be cut out of a sheet of paper: 8