n个点求 能构成多少个三角形
生活随笔
收集整理的這篇文章主要介紹了
n个点求 能构成多少个三角形
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
思路:1、先求出n個(gè)結(jié)點(diǎn)中取出三個(gè)結(jié)點(diǎn) 有多少種方法 C(n,3)的組合;2、在找出三個(gè)點(diǎn)不能組成三角形的情況;有斜率相等和不存在斜率兩種情況;完整代碼如下:#include<iostream>
#include <vector>
#include <assert.h>
using namespace std;
struct node//點(diǎn)的坐標(biāo);
{int x;int y;};
int get_the_number(node *a, int n);
//=========main函數(shù)
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個(gè)點(diǎn)中取三個(gè)點(diǎ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;//兩者之差就是三角形的個(gè)數(shù);}
總結(jié)
以上是生活随笔為你收集整理的n个点求 能构成多少个三角形的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务注册eureka上显示ip地址出现的
- 下一篇: Wireshark使用技巧之GeoIP显