在 C++ 中計算矩形中的正方形數量


給定一個長為 L、寬為 B 的矩形,其中 L>=B。目標是找到大小為 LXB 的矩形可以容納的正方形數量。

上圖顯示了一個大小為 3 X 2 的矩形。它包含 2 個 2X2 的正方形和 6 個 1X1 的正方形。

正方形總數 = 6+2=8。

  • 每個大小為 LXB 的矩形都有 L*B 個 1X1 的正方形。

  • 最大的正方形大小為 BXB。

  • 對於 L=B=1,正方形數 = 1。

  • 對於 L=B=2,正方形數 = 1 + 4 = 5。(1 個 2X2 的,4 個 1X1 的)

  • 對於 L=B=3,正方形數 = 1 + 4 + 9 = 14。(1 個 3X3 的,4 個 2X2 的,9 個 1X1 的)

  • 對於 L=B=4,正方形數 = 1 + 4 + 9 + 16 = 30(1 個 4X4 的,4 個 3X3 的,9 個 2X2 的,16 個 1X1 的)

  • ……………..

  • 對於每個 BXB 矩形,正方形的數量是

for ( i=1 to B )
No. of squares + = i*i.

當 L>B 時,將新增更多正方形。當 L=B+1(比 B 多 1 列)時,則新增的正方形將為 L + ( L-1) + ….+3+2+1 = L(L+1)/2

因此,對於額外的 L-B 列,新增的正方形將為 ( L-B ) * (B)(B+1)/2

  • 正方形總數將為 BXB 中的正方形 + (L-B) * (L)(L+1)/2。

  • 您還可以使用公式 B(B+1)(2B+1)/6 來計算級數 (1 + 4 + 9 +......BXB)(步驟 8 中)。

讓我們透過示例來理解。

輸入 − L=4,B=2

輸出 − 矩形中的正方形數量 − 11

解釋 − 8 個 1X1 的正方形和 3 個 2X2 的正方形。

輸入 − L=3,B=3

輸出 − 矩形中的正方形數量 − 14

解釋 − 9 個 1X1 的正方形,4 個 2X2 的正方形和 1 個 3X3 的正方形。

下面程式中使用的演算法如下

  • 我們取整數長度和寬度作為矩形的尺寸。

  • 函式 numofSquares(int l, int b) 獲取尺寸並返回大小為 lXb 的矩形中的正方形數量。

  • 對於最大的正方形 bXb。使用 for 迴圈從 1 到 b,並將每個 i*i 新增到 squares 中。

  • 現在,如果 l>b。新新增的正方形將為 (l-b)(b)(b+1)/2。將其新增到 squares 中。

  • 返回 squares 作為所需結果。

注意 − 保持長度>=寬度

示例

 即時演示

#include<iostream>
using namespace std;
int numofSquares(int l, int b){
   int squares=0;
   for(int i=1;i<=b;i++) //squares inside biggest square of size breadth X breadth{
      squares += i*i;
   }
   squares+=(l-b)*b*(b+1)/2;
   return squares;
}
int main(){
   int length = 5, breadth = 4; //keep length always >= breadth
   cout << "Count of squares is :"<< numofSquares(length,breadth);
}

輸出

如果我們執行以上程式碼,它將生成以下輸出:

Count of squares is :40

更新於: 2020-08-29

626 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告