博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求四边形的数量
阅读量:6436 次
发布时间:2019-06-23

本文共 2225 字,大约阅读时间需要 7 分钟。

  hot3.png

首先,什么样的是四边形?

1.四个点

2.第一个点与第二个点相连,第二个点与第三个点相连,第三个点与第四个点相连,第四个点与第一个点相连

3.任意三个点不在一条直线上

4.第二个和第四个点在第一、三两点所成直线的两边

python代码如下:

#-*-coding:utf8;-*-#qpy:3#qpy:console#point defineclass Point():  def __init__(self, row, col):    self.Row = row    self.Col = col#check if two points are linkeddef checklinked(p1, p2):  if(p1.Row == p2.Row):    return True  if(p1.Col == p2.Col):    return True  if(p2.Row-p1.Row == p2.Col-p1.Col):    return True  return False#check if three points are on a linedef checkline(p1, p2, p3):  if((p1.Row == p2.Row) & (p1.Row == p3.Row)):    return True  if((p1.Col == p2.Col) & (p1.Col == p3.Col)):    return True  if((p2.Row-p1.Row == p2.Col-p1.Col) & (p3.Row-p1.Row == p3.Col-p1.Col)):    return True  return False#check four points can be a 4def checkcross(p1, p2, p3,p4):  if(p3.Col == p1.Col):    if(((p4.Col-p1.Col)*(p2.Col-p1.Col)) <0):      return True    else:      return False  k=(p3.Row-p1.Row)/(p3.Col-p1.Col)  b=(p3.Col*p1.Row-p1.Col*p3.Row)/(p3.Col-p1.Col)  if((k*p2.Col+b-p2.Row)*(k*p4.Col+b-p4.Row) <0):    return True  else:    return False    #check four points can be a 4def check4(p1, p2, p3,p4):  if(checklinked(p1, p2)):    if(checklinked(p2, p3)):      if(checklinked(p3, p4)):        if(checklinked(p4, p1)):          if(checkline(p1, p2, p3)):          	 return False          if(checkline(p1, p2, p4)):          	 return False          if(checkline(p1, p4, p3)):            return False          if(checkline(p4, p2, p3)):          	 return False          if(checkcross(p1, p2, p3, p4)):            return True          else:            return False  return False  def calc4(N):  count = 0  NN= N*N  lst = list()  for i in range(0, N):    for j in range(0, N):      p = Point(i, j)      lst.append(p)  for n1 in range(0, NN):    for n2 in range(1, NN):      for n3 in range(1, NN):        for n4 in range(1, NN):          if((n1+n2+n3+n4) >(NN-1)):            continue          p1 = lst[n1]          p2 = lst[n1+n2]          p3 = lst[n1+n2+n3]          p4 = lst[n1+n2+n3+n4]          if(check4(p1,p2,p3,p4)):            count += 1          if(check4(p1,p2,p4,p3)):            count += 1  return count  print(“result:”)print(calc4(8))

 

转载于:https://my.oschina.net/raygo/blog/778205

你可能感兴趣的文章
在 Ubuntu 16.04 LTS 上安装 Python 3.6.0
查看>>
CloudCare容器技术白皮书
查看>>
苦酒入喉心作痛,红酒入鹅鹅想哭——震惊!勒索病毒想哭靠wine感染了Ubuntu16.04 ...
查看>>
Kubernetes Nginx Ingress Controller源码分析
查看>>
Linux下区分物理CPU、逻辑CPU和CPU核数
查看>>
第二十一章:变换(三)
查看>>
同步异步阻塞非阻塞杂记
查看>>
2018年中国银行业十件大事,“Fintech深度融合,科技子公司遍地” ...
查看>>
Git SSH 连接phacility服务器
查看>>
【客户案例】智能驾驶行业如何上云?
查看>>
foreman源NO_PUBKEY 6F8600B9563278F6
查看>>
揭秘:蚂蚁金服bPaaS究竟是什么?
查看>>
mongo数据库单节点搭建
查看>>
WPF模糊和阴影效果
查看>>
增加关系型数据库驱动配置同步任务
查看>>
别用这种方式聊天,你都不知道自己是怎么聊死的
查看>>
中国香港地区 DDoS- botnet 态势分析
查看>>
另一个角度的架构师
查看>>
SparseArray<E>详解
查看>>
Eclipse-Java代码规范和质量检查插件-PMD
查看>>