编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

互联网公司笔试编程题之——喷水装置

wxchong 2024-10-18 14:27:42 开源技术 8 ℃ 0 评论


今天继续来讲一讲在online judge上刷题时候遇到的比较有趣的编程题。虽然昨天发的东西并没有人看,也算是意料之中,早就知道这枯燥的编程题不会有读者感兴趣的。但是,就像之前有网友安慰我发的vlog没人看一样,不用在乎有没有粉丝,或者有没有人看,就当记录生活了。反正刷一遍题也比较容易忘,再当文章发一遍反而记得牢。本来今天是要讲另一道题的,但是那道题死活想不起来当时咋做的了...同级的朋友已经在两家大厂中选实习了,已经有拒绝offer的权力了,而我却还在刷题,真的不能比。

废话还是少说,请听题:

说李华同学家里很富有,住别墅,还有草坪(能不说多余的么),

这块草坪长20米,宽2米,妈妈让他给草浇水,让在草坪上放置半径为Ri的喷水浇灌装置,每个喷水装置可以给以它为中心的半径为实数Ri(1<Ri<15)的圆形区域浇水。假设他家是开五金店的,有充足的喷水装置i(1<i<600)个,并且有把握一定能把草坪全部湿润。你能帮李华同学计算一下,把整个草坪全部湿润,最少需要几个喷水装置么?


答:请用水管灌溉,有计算的时间已经浇完了(闭嘴),这明显是一道数学题。说白了就是用半径不同的圆铺满长方形,问最少用几个圆。

首先我们画一个矩形并且画几个能铺满他的圆,我们发现,要想用最少的圆铺满,就得让两个圆的公共弦刚好等于2,利用勾股定理求出底边长,将底边长加起来刚好大于等于20就是最少的圆的个数。画个图就懂了。


如上图所示,将求出的底边长乘以2再相加大于等于20的圆的个数就是答案。这里是online judge上已经通过的代码,由于给出的圆的半径有可能是乱序,所以收集到圆的半径以后先进行排序,如代码所示我用的是最原始且暴力的冒泡排序。也就是说在排序上还有优化的空间,各位如果感兴趣可以自行优化(想多了,真的没人看)。

// #include<math.h>

// void main ()

// {

// int n,num=1;

// float r[600];

// float a;

// float temp;

// scanf("%d",&n);

// for(int i=0;i<n;i++)

// {

// scanf("%f",&r[i]);

// }

// for(int i=0;i<n;i++)

// {

// for(int j=i;j<n;j++)

// {

// if(r[j]<r[i])

// {

// temp=r[i];

// r[i]=r[j];

// r[j]=temp;

// }

// }

// }

// for(int i=(n-1);i>=0;i--)

// {

// temp=r[i]*r[i]-1;

// a=a+pow(temp,0.5);

// //printf("%f ",num);

// if((2*a)>=20)

// {

// num+=1;

// break;

// }

// }

// printf("%d",num);

// }


Tags:

猜你喜欢

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表