m个点取n个点计算

在m个点中取n个点, 计算这n个点的距离和, 并找出距离和最大的那组.

struct node
{
	int x;
	int y;
};
int m = 5;
int n = 3;
int iCnt = 0;


int mul(int a, int b)
{
	int i = 0;
	int ret1 = 1;
	int ret2 = 1;
	int ret = 1;

	for(i = 1; i <= b; i++)
		ret1 *= (a-i+1);
	
	for(i = 1; i<= b; i++)
		ret2 *=i;

	ret = ret1/ret2;
	return ret;
}

node *m_node = new node[m];
int dis(node a, node b, node c)
{
	float flength = 0;
	float pow1 = 0;
	float pow2 = 0;
	float pow3 = 0;

	pow1 = pow((float)(a.y - b.y),2) + pow((float)(a.x - b.x),2);
	pow2 = pow((float)(a.y - c.y),2) + pow((float)(a.x - c.x),2);
	pow3 = pow((float)(c.y - b.y),2) + pow((float)(c.x - b.x),2);

	flength = sqrt(pow1) + sqrt(pow2) + sqrt(pow3);

	return (int)flength;
}

int calc()
{
	int i = 0;
	int j = 0;
	node Node[3];// 存最大和
	int iMax_dis = 0;// 最大和是多少
	int iTmp = 1;
	int iret = 0;

	for(i = 0; i <= m - n; i++)
	{
		for(j = 1; j <= mul(m-i, n-1); j++)
		{
			if(i+j+1 <= m)
			{
				while (i+j+iTmp-m+1 <=0)
				{
					iret = dis(m_node[i], m_node[i+j], m_node[i+j+iTmp]);
					if(iret > iMax_dis)
					{
						iMax_dis = iret;
						Node[0] = m_node[i];
						Node[1] = m_node[i+j];
						Node[2] = m_node[i+j+iTmp];
					}
					iTmp++;
				}

				iTmp = 1;
			}
		}
	}


	return 0;
}

void findArr()
{
	m_node[0].x = 1;
	m_node[0].y = 1;

	m_node[1].x = 3;
	m_node[1].y = 1;

	m_node[2].x = 2;
	m_node[2].y = 4;

	m_node[3].x = 1;
	m_node[3].y = 6;

	m_node[4].x = 4;
	m_node[4].y = 6;

	int i = 0;
	int mul_m = 1;
	int mul_n = 1;
	

	iCnt = mul(m, n);// 总组合数

	calc();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值