LA 3708

来源:互联网 发布:淘宝店铺促销模板代码 编辑:程序博客网 时间:2024/06/05 17:30

题目链接:点击打开链接

题目大意:一个圆圈有10000米,原先有n个墓碑在这上面等距分布,现在要求再加入m个墓碑使得m+n个墓碑等距分布,求移动墓碑的最小距离。

解题思路:

 固定一个墓碑不动,之后把其他墓碑都向其移动,之后求出移动距离之和。

代码:

#include<stdio.h>
#include<math.h>
int main()
{
    int m,n,i,j;
    double sum,x,y;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        sum=0;
        for(i=1;i<=n;i++)
        {
            x=double(i)/n*(m+n);
            sum+=fabs(x-floor(x+0.5))/(m+n);
        }
         printf("%.4lf\n",sum*10000);
    }
    return 0;
}

解题代码比较简练,不得不说这个方法比较厉害,耗费我那么长时间才看懂,运用等比例缩小,求出墓碑在上面移动的距离,之后再等比例放大,输出其值。

原创粉丝点击