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

การนับสี่เหลี่ยมที่ไม่ซ้ำที่จารึกไว้ในสามเหลี่ยมด้านเท่าใน C++


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

การนับสี่เหลี่ยมที่ไม่ซ้ำที่จารึกไว้ในสามเหลี่ยมด้านเท่าใน C++

ให้เราเข้าใจด้วยตัวอย่าง

ป้อนข้อมูล − ด้าน=3

ผลผลิต − จำนวนสี่เหลี่ยมจตุรัสที่จารึกไว้ในสามเหลี่ยมด้านเท่าคือ − 1

คำอธิบาย − รูปด้านบนแสดงรูปสี่เหลี่ยมผืนผ้า

ป้อนข้อมูล − ด้าน=10

ผลผลิต − จำนวนสี่เหลี่ยมจตุรัสที่จารึกไว้ในสามเหลี่ยมด้านเท่าคือ − 200

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

จากรูปด้านบน จะเห็นว่าขอบแนวนอนอยู่ระหว่างจุดต่างระดับ

นับจำนวนจุดได้ตั้งแต่ระดับ 0-1 ระดับ 1-2 ... ระดับ n-n+1

  • ป้อนด้านที่เป็นตัวแปรจำนวนเต็มและส่งไปยังฟังก์ชันสำหรับการประมวลผลต่อไป

  • ใช้ตัวแปรชั่วคราวเป็นตัวนับ ชั่วคราว และตรวจสอบ

  • ตรวจสอบว่าด้านเป็นเลขคี่แล้วเริ่มลูป FOR i ไปด้านข้าง - 1 จนถึง i มากกว่า 1

  • ภายในลูป ตรวจสอบ IF i &1 จากนั้นตั้งค่า temp เป็น (ด้าน - i)/2 และตั้งค่า check เป็น (i * (i + 1))/2 และตั้งค่านับเป็น check * temp ELSE ตั้งค่า temp เป็น ((ด้าน) - 1) - i)/2 และยังตั้งค่าเช็คเป็น (i * ( i + 1))/2 และตั้งค่านับเป็นเช็ค * ชั่วคราว

  • มิฉะนั้น ถ้าด้านคู่กัน เริ่มวนใหม่ FOR โดย i เป็นด้าน - 1 และฉันมากกว่า 1

  • ภายในลูป ตรวจสอบว่า i &1 จากนั้นตั้งค่า temp เป็น ((sides - 1) - i ) / 2 และ set check as (i * (i + 1)) / 2 และตั้งค่า count as check * temp ELSE set temp as (ด้าน - i) / 2 และตั้งค่าเช็คเป็น (i * (i + 1)) / 2 และตั้งค่าให้นับเป็นเช็ค * ชั่วคราว

  • จำนวนคืน

  • พิมพ์ผลลัพธ์

ตัวอย่าง

#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