已知平面上若干个点的坐标。
需要求出在所有的组合中,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);
}