这是我尝试解决的算法:
有n个圆形生物,半径为r0,r1,.. rn-1。在每一秒期间,具有半径ri和rj的两个生物体((随机和等距地选择)碰撞形成具有半径ri + rj的新的更大的生物体。在此处输入图像描述
给定n个生物的半径和一个整数k,打印一个浮点数,表示k秒后所有生物的预期总面积。
输入格式
第一行包含两个以空格分隔的整数,用于描述n和k各自的值。第二行包含n个以空格分隔的整数,用于描述r0,r1,...的相应值.rn-1
约束
1< n< 10 ^ 5
0℃; k< n-1个
1< ri< 10 ^ 4
如果答案的相对误差至多为10 ^ -9,则认为答案是正确的。
输出格式
打印一个浮点数,表示生物的预期总和' k碰撞后的区域。
示例输入0
3 1
1 2 3
示例输出0
67.0206432766
示例输入1
3 2
1 2 3
示例输出1
113.0973355292
解释1
我们有n = 3个生物,半径为{1,2,3}。在k = 2秒后,两次碰撞
放置并且我们留下一个半径为6的圆圈。然后打印剩余生物体占据的总面积,即pi(3.14159265359)* 6 ^ 2 = 113.0973355292。
我开始写下我的代码如下:
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] r = new int[n];
for(int r_i=0; r_i < n; r_i++){
r[r_i] = in.nextInt();
}
double sum=0;
double avrage=0;
double pi = 3.1415926535;
for(int i=0;i<n;i++){
int sumj=0;
for(int j=0;j<n;j++){
if(j!=i)
sumj=sumj+r[j];
System.out.println(sumj);
}
sum=sum+pi*Math.pow((r[i]),2)+pi*Math.pow(sumj,2);
}
avrage=sum/n;
System.out.println(avrage);
}
}
问题是我不确定在哪里使用参数k(秒)来解决这个问题。 它仅适用于k = 1(秒后)。 我该怎么改变代码适用于k = 2(2秒后)或k是另一个数字(x秒后)?