Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จำนวนสี่เหลี่ยมผืนผ้าที่แตกต่างกันที่เขียนลงในสามเหลี่ยมด้านเท่าใน C++

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

จำนวนสี่เหลี่ยมผืนผ้าที่แตกต่างกันที่เขียนลงในสามเหลี่ยมด้านเท่าใน C++

ตัวอย่าง

อินพุต - 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