算法训练---小生物逃逸(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+" ");
}

    }    

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值