C++中計算內接於等邊三角形的不同矩形的數量


我們有一個邊長為n的等邊三角形。目標是計算在三角形內可以存在的不同矩形的數量,矩形的水平邊平行於底邊。所有矩形的端點都與圖中所示的點相接觸。

讓我們透過例子來理解

輸入 − 邊長=3

輸出 − 內接於等邊三角形的不同矩形的數量為 − 1

解釋 − 上圖顯示了該矩形。

輸入 − 邊長=10

輸出 − 內接於等邊三角形的不同矩形的數量為 − 200

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

從上圖可以看出,水平邊存在於交替層級的點之間。

點的數量可以從第0層到第1層,第1層到第2層……第n層到第n+1層計算。

  • 輸入邊長作為整數變數,並將其傳遞給函式以進行進一步處理。

  • 將計數、臨時變數和檢查作為臨時變數。

  • 如果邊長是奇數,則啟動迴圈 FOR i 從 sides - 1 到 i 大於 1

  • 在迴圈內,如果 i & 1,則將 temp 設定為 (sides - i)/2,將 check 設定為 (i * (i + 1))/2,並將 count 設定為 check * temp;否則,將 temp 設定為 ((sides - 1) - i)/2,並將 check 設定為 (i * (i + 1))/2,並將 count 設定為 check * temp。

  • 否則,如果邊長是偶數,則啟動另一個迴圈 FOR,i 從 sides - 1 到 i 大於 1。

  • 在迴圈內,如果 i & 1,則將 temp 設定為 ((sides - 1) - i ) / 2,將 check 設定為 (i * (i + 1)) / 2,並將 count 設定為 check * temp;否則,將 temp 設定為 (sides - i) / 2,將 check 設定為 (i * (i + 1)) / 2,並將 count 設定為 check * temp。

  • 返回 count

  • 列印結果。

示例

 線上演示

#include <iostream>
using namespace std;
int rec_inside_equi(int sides){
   int count = 0, temp, check;
   if(sides%2 != 0){
      for(int i = sides - 2; i >= 1; i--){
         if (i & 1){
            temp = (sides - i) / 2;
            check = (i * (i + 1)) / 2;
            count += check * temp;
         }
         else{
            temp = ((sides - 1) - i) / 2;
            check = (i * (i + 1)) / 2;
            count += check * temp;
         }
      }
   }
   else{
      for(int i = sides - 2; i >= 1; i--){
         if (i & 1){
            temp = ((sides - 1) - i) / 2;
            check = (i * (i + 1)) / 2;
            count += check * temp;
         }
         else{
            temp = (sides - i) / 2;
            check = (i * (i + 1)) / 2;
            count += check * temp;
         }
      }
   }
   return count;
}
int main(){
   int sides = 4;
   cout<<"Count of distinct rectangles inscribed in an equilateral triangle are: "<<rec_inside_equi(sides);
   return 0;
}

輸出

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

Count of distinct rectangles inscribed in an equilateral triangle are: 4

更新於:2020年12月3日

88 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.