n个点求 能构成多少个三角形

思路: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;//两者之差就是三角形的个数;

}

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个问题可以通过枚举三个点,判断它们是否组成三角形来解决。具体来说,可以遍历所有的三元组 $(p_i, p_j, p_k)$,其中 $i < j < k$,并判断它们是否组成三角形。如果是,则计数器加一。 判断三个点是否组成三角形可以使用叉积的方法。具体来说,如果三个点 $(x_i, y_i)$、$(x_j, y_j)$ 和 $(x_k, y_k)$ 组成的向量 $\vec{v_1} = (x_j - x_i, y_j - y_i)$ 和 $\vec{v_2} = (x_k - x_i, y_k - y_i)$ 的叉积的符号相反,则它们组成三角形是朝上的;否则是朝下的。具体来说,如果 $\vec{v_1} \times \vec{v_2} > 0$,则它们组成三角形是朝上的;否则是朝下的。 具体的 JavaScript 代码如下: ```javascript function countTriangles(points) { const n = points.length; let count = 0; for (let i = 0; i < n - 2; i++) { for (let j = i + 1; j < n - 1; j++) { for (let k = j + 1; k < n; k++) { if (isTriangle(points[i], points[j], points[k])) { count++; } } } } return count; } function isTriangle(p1, p2, p3) { const v1 = { x: p2.x - p1.x, y: p2.y - p1.y }; const v2 = { x: p3.x - p1.x, y: p3.y - p1.y }; return v1.x * v2.y - v1.y * v2.x !== 0; } ``` 其中,`points` 是一个包含 $N$ 个点的数组,每个点用一个对象表示,包含 `x` 和 `y` 两个属性,表示点在平面上的横纵坐标。`countTriangles` 函数遍历所有的三元组 $(p_i, p_j, p_k)$,并调用 `isTriangle` 函数判断它们是否组成三角形。`isTriangle` 函数计算向量 $\vec{v_1}$ 和 $\vec{v_2}$ 的叉积,判断它们的符号是否相反。如果相反,则返回 `true`,表示三个点组成三角形是朝上的;否则返回 `false`,表示三角形是朝下的。最终,`countTriangles` 函数返回组成三角形个数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值