使用 C++ 統計給定尺寸矩形內菱形的數量


給定一個長為高度 X 寬度 的矩形。該矩形在二維座標系中表示,左下角位於點 (0,0)。因此,目標是在此矩形內統計所有滿足以下條件的菱形的數量:

  • 菱形面積大於 0。

  • 菱形的對角線平行於 x 軸和 y 軸。

  • 菱形的所有角點都具有整數座標。

讓我們透過示例來理解

輸入 - 長度=3 寬度=3

輸出 - 給定尺寸矩形內可能的菱形數量為:4

解釋 - 下圖顯示了一個高度=寬度=3 的矩形。我們還可以看到四個面積 > 0 且對角線平行於兩個軸的菱形(也具有整數座標):

First [ (1,0), (2,1), (1,2), (0,1) ]
Second [ (2,0), (3,1), (2,2), (1,1) ]
Third [ (2,1), (3,2), (2,3), (1,2) ]
Fourth [ (1,1), (2,1), (1,2), (0,1) ]

輸入 - 長度=2 寬度=3

輸出 - 給定尺寸矩形內可能的菱形數量為:2

解釋 - 下圖顯示了一個高度=2 寬度=3 的矩形。我們還可以看到兩個菱形在裡面

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

第一個非零面積且具有整數座標的菱形將從右上角的 (2,2) 開始。從索引 i=j=2 開始遍歷到 i<=length 和 j<=length。將 i 和 j 增加 2 以固定偶數長度(用於整數座標)。具有這些對角線的菱形數量將為 (height-i+1)X(width-j+1)。

  • 將長度和寬度作為整數。

  • 函式 possible_rhombus(int length, int width) 獲取矩形的尺寸並返回矩形內滿足所有提及條件的菱形的數量。

  • 將初始計數設為 0。

  • 從 i=2 遍歷到 i<=length,以及從 j=2 遍歷到 j<=width。

  • 對於每個 i,j,取 temp_1=length-i+1 和 temp_2=width-j+1

  • 將 temp_1*temp_2 加到計數中。

  • 將 i 和 j 增加 2(用於整數座標)。

  • 最後返回計數作為結果。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
long long possible_rhombus(int height, int width){
   long long count = 0;
   for (int i = 2; i <= height; i += 2){
      for (int j = 2; j <= width; j += 2){
         int temp_1 = height - i + 1;
         int temp_2 = width - j + 1;
         count += temp_1 * temp_2;
      }
   }
   return count;
}
int main(){
   int height = 4, width = 4;
   cout<<"Count of number of rhombi possible inside a rectangle of given size are: "<<possible_rhombus(height, width);
   return 0;
}

輸出

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

Count of number of rhombi possible inside a rectangle of given size are: 16

更新於: 2020-12-01

144 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.