蓝桥杯 算法训练 小生物的逃逸(c语言版详细注释)

试题 算法训练 小生物的逃逸

                                                                                  蓝桥杯试题解答汇总链接

资源限制

       时间限制:1.0s 内存限制:256.0MB


问题描述

       空间中有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

数据规模与约定
1<=n、m<=100,|Xi|、|Yi|、|Zi|<=10000,1<=Ri<=10000;
数据保证所有球严格不接触,小生物都不在球面上。
代码
#include<stdio.h>
int main(){
	int n,m,i,j;
	scanf("%d%d",&n,&m);
	int a[n][4],b[m][3];//a数组用来存储圆心坐标和半径,b数组用来存储小生物坐标 
	for(i=0;i<n+m;i++){
		if(i<n){
			for(j=0;j<4;j++){
				scanf("%d",&a[i][j]);
			}
		}
		else{
			for(j=0;j<3;j++){
				scanf("%d",&b[i-n][j]);
			}
		}
	}
	for(i=0;i<m;i++){
		int count=0;//用来计算每个小生物逃逸需要经过的球面数 
		for(j=0;j<n;j++){
			int k=2,sum=0;//sum计算坐标差的平方的和 
			do{
				sum+=(b[i][k]-a[j][k])*(b[i][k]-a[j][k]);
			}while(k--);//k=0结束循环 
			if(sum<a[j][3]*a[j][3]){//sum小于半径的平方那么count+1 
				count++;
			}
		}
		printf("%d ",count);
	}
	return 0;
} 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Derrick-Xu

谢大哥打赏,我会继续努力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值