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 次檢視

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告