今天无意中发现一道算法题很有意思,题不难,都是初中的知识,主要就是求一个固定点到一条直线的最短距离,我用了一个非常麻烦的方法才求出,我先是用余弦定理求出夹角再判断用勾股定理结合方程组解出来,很是麻烦,还画了几张图,我就问我以为朋友,他说很简单啊,拿线上两点就求出来了线的斜率然后结合点到直线距离公式就出来了。

可能我描述的不是很清楚,先来看一下题:

Brio got his house constructed near the National Highway. The Construction and Planning Committee has planned to construct a road near his house. Brio is worried about the Committee's plan as he fears that his house might come on the way of the road being constructed. In such a case, he needs to request the Committee members to replan the construction. Assume that Brio's house is a circle with center at (0,0) and radius r. Given 2 integral points (x1,y1) and (x2,y2) through which the road passes you need to give output as mentioned below:
if the road crosses his house, print "REPLANNING" (quotes for clarity). if the road just touches his house, print "JUST MISSED" if the road is far off his house, print "SAFE"
INPUT
The first line of the input contains the number of testcases T. Each of the next T test cases has 2 lines, the first containing 4 space separated integers x1 y1 x2 y2 and the second line contains r.OUTPUT
One line per test case containing the required output.CONSTRAINTS
T<=10000
-10000 <= x1 y1 x2 y2 <= 10000
r <= 10000示例输入:
2
5 5 -5 5
4
1 2 3 4
5
示例输出:
SAFE
REPLANNING

这道题的意思就是说有个人叫Brio,他有个房子,政府想在他家旁边修条路,但是他怕吵,想看看什么距离不会吵,假设Brio的房子是一个圆心,中心位于(0,0)和半径r。给定道路经过的2个积分点(x1,y1)和(x2,y2),你需要输出如下所述的输出:

如果道路穿过他的房子范围,请打印“REPLANNING”(为清晰起见,引号)。如果这条路刚刚触及他的房子范围,如果道路远离他的房子范围,请打印“JUST MISSED”,打印“SAFE”

两个点和安全距离都是用户输入,用户先输入一个数代表要输入几组数据,然后每输入4个数代表两点坐标,再输入一个安全距离,这么循环输入。

大概就是这么个意思,有英语好的自己翻译一下。

主要就是求点到直线的距离吗,我们一边看代码一边说

import math
import numpy
def get_distance(x1, y1, x2, y2):#如果x1=x2,说明是一条竖直的线,没有斜率,距离就是x的绝对值if (x1 - x2) == 0:return math.fabs(x1)#如果y1=y2,说明是一条水平的线,斜率为0,距离就是y的绝对值if (y1 - y2) == 0:return math.fabs(y1)#初中的知识,给定两点求斜率k=math.fabs(y2-y1)/math.fabs(x2-x1)#y=kx+c,求出cc=y1-k*x1#先换成一般式,再用点到直线距离公式求出距离distance=math.fabs(c)/math.sqrt(k**2+1)return distancedef compare(distance,r):if distance>r:print("SAFE")elif distance==r:print("JUST MISSED")else:print("REPLANNING")def del_input(numbers):num=len(numbers)for x in range(num):#得到房子和路的距离distance=get_distance(numbers[x][0],numbers[x][1],numbers[x][2],numbers[x][3])#比较一下安全不安全,输出指定的字符串compare(distance,numbers[x][4])if __name__ == '__main__':#从键盘得到的输入会变成字符串,需要转换一下num=int(input("请输入有几组数据:"))#使用numpy生成num行,5列的二维数组,用来存储数据numbers=numpy.zeros(shape=(num,5))#循环获取每一行的数据,前四个存储坐标,第五个存储安全距离for x in range (num):list=input("请以空格隔开输入四个数字:").split(" ")for y in range(4):numbers[x][y]=int(list[y])numbers[x][4]=input("请输入安全距离:")#把得到的数据传入函数进行分批运算del_input(numbers)

【精选】Python入门算法题(三)相关推荐

  1. 【精选】python入门算法题(二)

    上篇文章分享了一些入门算法题,如果没有看过的可以去看一下上一篇文章,这篇文章囊还是分享一些我精选的入门算法程序,废话不多说,上代码! """ 实心矩形 "&qu ...

  2. 【精选】python入门算法题(一)

    我们知道学习一门语言最快的方法就是多敲代码,敲一些难度适中的代码可以让我们学的更快,理解的更深,有时候你看书看博客都不明白的一个概念可能你敲一会代码你就明白到底怎么回事了,下面是我精选的python入 ...

  3. JAVA入门算法题(三)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 估计统计字符是所有人都做过的题 这里给出两种思路,第一种思路是比 ...

  4. python快速编程入门课后程序题答案-Python 入门编程题:1~10(答案)

    Python 入门编程题:1~10(答案) 提示:最好还是先思考,先编写,再看答案哦 ^_^ 1. for i in range(1, 5): for j in range(1,5): for k i ...

  5. java string逆序_java经典入门算法题,java初学者必备

    java经典入门算法题 开头求关注警告 喜欢这样文章的可以关注我,我会持续更新,你们的关注是我更新的动力!需要更多java学习资 料的也可以私信我! 祝关注我的人都:身体健康,财源广进,福如东海,寿比 ...

  6. Python入门100题之002:个税计算

    题目: •企业发放的奖金根据利润提成. •利润(I)低于或等于10万元时,奖金可提10%: •利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%: • ...

  7. 【精选】JAVA入门算法题(五)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:重复的字符串 /*** 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超 ...

  8. 【精选】JAVA入门算法题(四)

    把敬业变成习惯.短期来看是为了雇主,长期来看是为了自己. 1.题目:全排列问题 这种问题在算法题中应用很多,主要思路是使用递归来求,求n个数的全排列就是把第一个数固定后求n-1个数的全排列,不断递归到 ...

  9. python如何改变入参的值_从事数据分析3年后,发现用python入门数据分析这三本书必看!...

    做数据分析为什么选择python? 为什么选择python来做数据分析?先来看一下用python做数据分析有什么优势 1.python在数据分析方面有非常专业的模块,很多常用功能,在做数据分析时非常方 ...

最新文章

  1. QT 烦人的parent该如何理解
  2. 人工智能应用实践与趋势
  3. Stanford UFLDL教程 稀疏编码自编码表达
  4. python安装orm_Python流行ORM框架sqlalchemy安装与使用教程
  5. rman全备时,配置项如何设置?
  6. 用SQL语句更改数据库名,表名,列名
  7. html实现 左图右文_让CSS flex布局最后一行左对齐的N种方法
  8. 简明Python教程学习笔记_3_模块
  9. SpringBoot 使用 log4j2
  10. 线上四台机器同一时间全部 OOM,到底发生了什么?
  11. php基础-php基本语法
  12. 约瑟夫环问题 poj 1012 poj 2244
  13. Warez 组织的64K 3D动画下载
  14. oc 之中的 汉字字符串转化成为拼音 汉字字符串的排序
  15. 智能和弦生成工具-Plugin Boutique Scaler 2 v2.3.1 WiN-MAC
  16. Draftsharks回顾周末梦幻足球
  17. 【Pytorch】torch.Tensor.masked_fill()
  18. 写好一份数据分析报告需要注意的13个要点
  19. H12-723题库-个人整理笔记
  20. 070-JAVA项目实训:仿QQ即时通讯软件系列讲座五(讲解用户注册功能)

热门文章

  1. 测试用例驱动阅读Express源码
  2. 电脑用久了又卡又慢教你一招让你电脑调整为最佳性能!
  3. 修改pycharm缓存文件路径
  4. 立创开源丨基于CH340C的STC三口双电压自动冷启动自动下载器
  5. 关于N*N方格从(1,1)到(N,N)的最短距离
  6. GIS讲堂第四课-大量POI点的展示
  7. 利用Wox实现无障碍谷歌翻译
  8. java 蓝牙 api_蓝牙API
  9. DUMA: Reading Comprehension with Transposition Thinking
  10. 老人地摊淘到旧书 发现刊有老伴年轻照片(图)