Bailian2693 最远距离

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;
}
发布了2289 篇原创文章 · 获赞 2373 · 访问量 265万+

猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/105465067