เรามีสามเหลี่ยมด้านเท่าที่มีความยาวด้าน เป้าหมายคือนับจำนวนสี่เหลี่ยมผืนผ้าที่แตกต่างกันที่สามารถอยู่ภายในสามเหลี่ยมได้ โดยที่ด้านแนวนอนของสี่เหลี่ยมผืนผ้าขนานกับฐาน นอกจากนี้ปลายทั้งหมดของสี่เหลี่ยมผืนผ้าสัมผัสจุดตามที่แสดง

ตัวอย่าง
อินพุต - sides=3
เอาต์พุต - จำนวนสี่เหลี่ยมผืนผ้าที่แตกต่างกันที่เขียนลงในสามเหลี่ยมด้านเท่าคือ - 1
คำอธิบาย - รูปข้างต้นแสดงสี่เหลี่ยมผืนผ้า
อินพุต - sides=10
เอาต์พุต - จำนวนสี่เหลี่ยมผืนผ้าที่แตกต่างกันที่เขียนลงในสามเหลี่ยมด้านเท่าคือ - 200
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ตามที่เห็นจากรูปข้างต้น ด้านแนวนอนจะอยู่ระหว่างจุดของระดับสลับกัน
จำนวนจุดสามารถนับได้จากระดับ 0-1, ระดับ 1-2 ... ระดับ n-n+1
- รับค่าด้านเป็นตัวแปรจำนวนเต็มและส่งต่อให้ฟังก์ชันเพื่อประมวลผลต่อ
- ใช้ตัวแปรชั่วคราว count, temp และ check
- ตรวจสอบ ถ้าด้านเป็นคี่ เริ่มลูป 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