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

更新于:2020年8月17日

329 次查看

开启您的职业生涯

完成课程获得认证

开始学习
广告