碰撞检测算法

时间:2017-04-14 14:02:52

标签: java algorithm

这是我尝试解决的算法:

有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

enter image description here

示例输入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秒后)?

0 个答案:

没有答案