C语言中从纸张中裁剪出最大数量的指定尺寸矩形
给定纸张的尺寸,长度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
下面程序中使用的算法如下:
变量Length和Breadth用于存储纸张的尺寸。
变量len和bre用于存储矩形的尺寸。
函数maxRectangles (int L, int B, int l, int b) 获取纸张和矩形的尺寸,并返回可能的最大矩形数量。
变量numh和numv用于存储可以水平和垂直裁剪的矩形数量。
对于水平方向,cols=L/l 和 rows=B/b,可能的矩形数 numh=cols*rows。
对于垂直方向,cols=L/b 和 rows=B/l,可能的矩形数 numv=cols*rows。
返回上述两步中获得的最大值 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
广告