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
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP