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

การนับสามเหลี่ยมที่มีทั้งหมด n จุดโดยมี m collinear ใน C++


เราได้รับสองตัวแปร n และ m แทนจำนวนจุดบนระนาบ 2 มิติ จาก n จุด มี m จุดเป็นแนวร่วม เป้าหมายคือการหาจำนวนสามเหลี่ยมที่สามารถเกิดขึ้นได้โดยใช้จุด n เหล่านี้

จุดคอลลิเนียร์ − จุดที่อยู่บนเส้นเดียวกันเรียกว่า collinear คะแนน A และ B เป็นคู่ขนานกัน

การนับสามเหลี่ยมที่มีทั้งหมด n จุดโดยมี m collinear ใน C++

ให้ n=4 (A,B,C,D ) , m=2 (A,B)

จำนวนสามเหลี่ยม −

การเลือกสามคะแนนจาก 4 =4C3

แต่จุดที่โคลิเนียร์ไม่สามารถสร้างรูปสามเหลี่ยมได้ ดังนั้นให้ลบสามเหลี่ยมที่เป็นไปได้ที่จะนับด้านบน =2C3

สามเหลี่ยมทั้งหมด=4C3 - 2C3 =4-0 =4 ( ABC, ACD, BCD, ABD )

สำหรับ n และ m =nC3 - mC3

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

ป้อนข้อมูล − n=5, m=3

ผลผลิต − จำนวนสามเหลี่ยมที่มีทั้งหมด n จุดที่มี m collinear คือ − 9

คำอธิบาย − สามเหลี่ยมทั้งหมด =5C3 - 3C3 =10 - 1 =9

ป้อนข้อมูล − n=10, m=5

ผลผลิต − จำนวนสามเหลี่ยมที่มีทั้งหมด n จุดที่มี m collinear คือ − 110

คำอธิบาย − สามเหลี่ยมทั้งหมด =10C3 - 5C3 =120 - 10 =110

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

เราจะสร้างสามเหลี่ยมปาสกาลสำหรับการคำนวณชุดค่าผสม ทุกแถวคำนวณโดยใช้การเพิ่มคอลัมน์แถวก่อนหน้า

  • ใช้ตัวแปร n และ m เป็นอินพุตสำหรับจุดจำนวนหนึ่ง

  • ฟังก์ชัน collinear_points(int n,int m) รับ n และ m แล้วคืนค่าจำนวนสามเหลี่ยมที่มีทั้งหมด n จุดโดยมี m collinear

  • Set count =ตรวจสอบ (n, 3) - ตรวจสอบ (m, 3); ( สำหรับคำนวณ nC3 - mC3 )

  • ตรวจสอบฟังก์ชัน (int n, int r) รับ n และ r และส่งคืนค่า nCr

  • ใช้อาร์เรย์ arr ที่มีความยาว r+1

  • ตั้งค่าทั้งอาร์เรย์ด้วย 0 โดยใช้ memset

  • ตั้งค่า arr[0] =1.

  • ใช้ two for loops จาก i=0 ถึง i<=n. และ j=min (i,r) ถึง j>0 คำนวณสามเหลี่ยมปาสกาลเป็น arr[j]=arr[j]+arr[j-1]

  • ในที่สุดเราจะได้ arr[r] เป็น nCr . คืนสินค้า

  • หลังจากสิ้นสุดฟังก์ชัน check() จะได้นับสามเหลี่ยม

  • ผลตอบแทนนับเป็นผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int check(int n, int r){
   int arr[r+1];
   memset(arr, 0, sizeof(arr));
   arr[0] = 1;
   for (int i = 1; i <= n; i++){
      for (int j = min(i, r); j > 0; j--){
         arr[j] = arr[j] + arr[j-1];
      }  
   }
   return arr[r];
}
int collinear_points(int n,int m){
   int count = check(n, 3) - check(m, 3);
   return count;
}
int main(){
   int n = 6, m = 2;
   cout<<"Count of triangles with total n points with m collinear are: "<< collinear_points(n, m);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Count of triangles with total n points with m collinear are: 20