在 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