n個點求 能構成多少個三角形
阿新 • • 發佈:2019-01-02
思路:1、先求出n個結點中取出三個結點 有多少種方法 C(n,3)的組合; 2、在找出三個點不能組成三角形的情況;有斜率相等和不存在斜率兩種情況; 完整程式碼如下: #include<iostream> #include <vector> #include <assert.h> using namespace std; struct node//點的座標; { int x; int y; }; int get_the_number(node *a, int n); //=========main函式 int main() { int n; cin >> n; node *a = new node[n]; //node *a=(node *)malloc(sizeof(node)*n); for (int i = 0; i < n; i++) cin >> a[i].x >> a[i].y; for(int i=0;i<n;i++) cout<<a[i].x<<" "<<a[i].y<<endl; int result = get_the_number(a, n); cout << result << endl; } int get_the_number(node *a, int n) { if (n <= 2)//不能滿足組成三角形的情況; return 0; int number1 = n*(n - 1)*(n - 2) / 6;//從n個點中取三個點有多少種取法; int counts = 0;//求出不能組成三角形的情況;1、斜率相等;2、斜率不存在 for (int i = 0; i < n;i++) for (int j = i + 1; j < n;j++) for (int k = j + 1; k < n; k++) { if ((a[k].y - a[j].y) / (a[k].x - a[j].x) == (a[j].y - a[i].y) / (a[j].x - a[i].x)) counts++; if (a[k].x == a[j].x == a[i].x) counts++; } return number1 - counts;//兩者之差就是三角形的個數; }