算法训练---小生物逃逸(Java)

问题描述

  空间中有n个球,这些球不相交也不相切。有m个可以视为质点的小生物,可能在某些球内,也可能在所有球之外,但不会在球面上。问这些生物从原来的地方逃逸到所有球外面的空间,至少要经过多少层球面。

输入格式

  第一行两个数n、m:表示球的数量和小生物的数量;

  接下来n行每行四个整数Xi、Yi、Zi和Ri:表示一个球的三维坐标和半径;

  接下来m行每行三个整数Xi、Yi、Zi:表示一个生物的坐标。

输出格式

  一行m个数:表示每个小生物逃逸时至少经过的球面数。

样例输入

2 2

0 0 0 2

0 0 0 4

0 0 1

0 0 3

样例输出

2 1

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

import org.omg.IOP.CodeSets;
public class Main {
public static void main(String [] args) {
    
    Scanner scanner =new Scanner(System.in);
    int n=scanner.nextInt();//球的数量
    int m=scanner.nextInt();//小生物的数量
    
    int nArray[][]=new int[n][4];
    int mArray[][]=new int [m][3];
    
    for(int i=0;i<n;i++) {
        for(int j=0;j<4;j++)
        nArray[i][j]=scanner.nextInt();
    }
    
    for(int i=0;i<m;i++) {
        for(int j=0;j<3;j++)
        mArray[i][j]=scanner.nextInt();
    }
for(int i=0;i<m;i++) {
    int count=0;
    for(int j=0;j<n;j++) {
        int k=2; int sum=0;
        do {
            sum+=(mArray[i][k]-nArray[j][k])*(mArray[i][k]-nArray[j][k]);
        } while ((k--)>0);
        if(sum<nArray[j][3]*nArray[j][3])
            count++;
    }
    System.out.print(count+" ");
}

    }    

}

猜你喜欢

转载自blog.csdn.net/qq_62994974/article/details/128585316