2693:最远距离
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一组点(x,y),求距离最远的两个点之间的距离。
输入
第一行是点数n(n大于等于2)
接着每一行代表一个点,由两个浮点数x y组成。
输出
输出一行是最远两点之间的距离。
使用printf("%.4f\n", dis)输出距离值并精确到小数点后4位。
样例输入
6
34.0 23.0
28.1 21.6
14.7 17.1
17.0 27.2
34.7 67.1
29.3 65.1
样例输出
53.8516
提示
注意在内部计算时最好使用double类型,但在用scanf读取数据时只能用float类型的变量。
来源
计算概论05
问题链接:Bailian2693 最远距离
问题简述:(略)
问题分析:简单计算题暴力一下就可以了。先算出任意两点的距离,然后再计算最大值。算出的距离也可以不放在数组中,可以边计算边求最大值。给出2个AC的题解程序,可以比较着看。
程序说明:函数hypot()用来计算平方和的平方根,能使用库函数要尽量使用库函数。浮点数的输入格式要用“%lf”,输出格式要用“%f”,这是一种约定,不然在线提交的程序有可能出现WA。
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian2693 最远距离 */
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 100;
double x[N], y[N];
int main()
{
int n;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%lf%lf", &x[i], &y[i]);
double maxd = hypot(x[0] - x[1], y[0] - y[1]);
for(int i = 0; i < n; i++)
for(int j = i + 1; j < n; j++)
maxd = max(maxd, hypot(x[i] - x[j], y[i] - y[j]));
printf("%.4f\n", maxd);
return 0;
}
AC的C++语言程序如下:
/* Bailian2693 最远距离 */
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int N = 100;
double x[N], y[N];
double dist[N * N / 2];
int main()
{
int n, cnt = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
scanf("%lf%lf", &x[i], &y[i]);
for(int i = 0; i < n; i++)
for(int j = i + 1; j < n; j++)
dist[cnt++] = hypot(x[i] - x[j], y[i] - y[j]);
int k = 0;
for(int i = 1; i < cnt; i++)
if(dist[i] > dist[k]) k = i; // 求最大值的下标
printf("%.4f\n", dist[k]);
return 0;
}