蓝桥决赛之最小距离



已知平面上若干个点的坐标。


需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数)。


比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd 这6个距离的平均值。


每个点的坐标表示为:横坐标,纵坐标


坐标的取值范围是:1~1000


所有点的坐标记录在in.txt中,请读入该文件,然后计算。


注意:我们测试您的程序的时候,in.txt 可能会很大,比如包含上万条记录。


举例:
如果,in.txt 内的值为:


10,10
20,20
80,50
10,20
20,10


则程序应该输出:
11.38




请编程,读入in.txt文件,计算并输出4个点平均距离的最小值。




要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。 
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;

不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。



#include<iostream> 
#include<fstream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
double min1=99999999;
double sum1(int a,int b,int c,int d)
{
	return sqrt(pow(1.0*a-c,2.0)+pow(1.0*b-d,2.0));
}
int main()
{
	fstream f1; int i=0;  	int a[100000][2];
	f1.open("e://in.txt",ios::in);//我的文件在f根目录下
	while(!f1.eof())
   {

		char aa[100],bb[100],cc[100];
		f1>>aa;
		strcpy(bb,strtok(aa,","));
		strcpy(cc,strtok(NULL,","));
		a[i][0]=atoi(bb);
		a[i][1]=atoi(cc);	
		i++;
   }
   for(int aaa=0;aaa<i;aaa++)
   for(int b=aaa+1;b<i;b++)
   for(int c=b+1;c<i;c++)
   for(int d=c+1;d<i;d++)
   {
   	double sum=0;
   	sum+=sum1(a[aaa][0],a[aaa][1],a[b][0],a[b][1])+sum1(a[aaa][0],a[aaa][1],a[c][0],a[c][1])+sum1(a[aaa][0],a[aaa][1],a[d][0],a[d][1])+sum1(a[b][0],a[b][1],a[c][0],a[c][1])+sum1(a[b][0],a[b][1],a[d][0],a[d][1])+sum1(a[c][0],a[c][1],a[d][0],a[d][1]);
   	sum/=6;
   	if(min1>sum)
   	min1=sum;
   }
   printf("%.2f",min1);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值