问题描述
在一个周长为10000的圆上等距分布着n个雕塑。现在又有m个新雕塑加入(位置可以随意放),
希望所有n+m个雕塑在圆周上均匀分布。这就需要移动其中一些原有的雕塑。
要求n个雕塑移动的总距离尽量小。
输入格式
输入包含若干组数据。每组数据仅一行,包含两个整数n和m(2≤n≤1 000,1≤m ≤1 000),
即原始的雕塑数量和新加的雕塑数量。输入结束标志为文件结束符(EOF)。
输出格式
输出一个正整数,表示每袋核桃的数量。
样例输入1
2 1
2 3
3 1
10 10
样例输出1
1666.6667
1000.0
1666.6667
0.0
import java.util.Scanner;
public class _1雕塑 {
public static void main(String[] args) {
Scanner abc=new Scanner(System.in);
int a=abc.nextInt();
int b=abc.nextInt();
while (a!=0 || b!=0) {
double ans = 0.0;
for(int i = 1; i < a; i++) {
double pos = (double)i / a * (a+b); //计算每个需要移动的雕塑的坐标
ans += Math.abs(pos - Math.floor(pos+0.5)) / (a+b); //累加移动距离
}
System.out.printf("%.4f",ans*10000); //等比例扩大坐标
break;
}
}
}
探讨了在一个固定周长的圆上,如何通过最小化原有雕塑的移动距离来均匀分布新增雕塑的问题。采用数学方法计算每个雕塑的新位置,以实现整体布局的均匀分布。
1377

被折叠的 条评论
为什么被折叠?



