首页 > 试题广场 >

圆周上两点间的距离

[编程题]圆周上两点间的距离
  • 热度指数:1197 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

定义圆周上两点的距离s为这两点之间的劣弧对应的圆心角度数(0<=s<=180),现输入圆周上的n个点(n>=2),以角度a表示其位置(0<=a<360),输入按a从小到大排序。求最远的一对点之间的距离。


输入描述:
第一行为点个数n(n≤100000),后跟n行,每行一个双精度浮点数,表示点的角度(小数点后保留8位),例如输入样例中为4个点的输入


输出描述:
输出最远的一对点之间的距离(双精度浮点数,小数点后保留8位)和'\n'换行符。例如输入样例中,10.00000000与183.00000000两个点之间的距离为173.00000000,大于10.00000000与198.0000000之间的距离172.00000000,所以应输出:

173.00000000
示例1

输入

4
10.00000000
180.00000000
183.00000000
198.00000000

输出

173.00000000

备注:
注意事项:

1.程序性能要足够快,否则可能无法通过一些大型测试数据;

2.如果使用java语言,可以考虑使用BufferedReader从标准输入读取输入数据,Scanner读取一些比较大的输入数据会发生超时。
预期输出不对,第一组测试用例,输入有58875个数据,预期输出为179.00021342。
我用我的算法算出来是179.00032571,所以没通过,接着我找到了这个结果是怎么算出来的。
在这个测试用例中,a[46944] = 0.00000038, a[26634] = 179.00032609,
 a[26634] - a[46944] = 179.00032571。
int main() {
    int n = 0;
    scanf("%d", &n);
    double* a = (double*)malloc(sizeof(double)*n);
    for(int i = 0; i < n; ++i)
    {
        scanf("%lf", a+i);
    }

    printf("a[46944] = %0.8lf, a[26634] = %0.8lf", a[46944], a[26634]);
    free(a);
    return 0;
}
在第一组测试用例中,这段代码输出是
a[46944] = 0.00000038, a[26634] = 179.00032609

所以我认为是答案错了

发表于 2022-03-18 09:55:30 回复(2)