题目链接:点击打开链接
题目大意:一个圆圈有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;
}
解题代码比较简练,不得不说这个方法比较厉害,耗费我那么长时间才看懂,运用等比例缩小,求出墓碑在上面移动的距离,之后再等比例放大,输出其值。