Python程序:计算彩色顶点正多边形中等腰三角形的数量
假设我们有一个n边的正多边形,用大小为n的二进制字符串表示。顶点可以涂成蓝色(0)或红色(1)。它们按顺时针方向着色。我们必须计算顶点为正多边形顶点且颜色相同的等腰三角形的数量。
因此,如果输入类似于polygon = "111010",则输出为2,因为

有两个三角形ACE和AFE。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个函数all()。它将接收n。
- 如果n mod 2等于1,则no := n*(n-1) /2
- 否则,no := n*(n/2-1)
- 如果n mod 3等于0,则no := no - n/3*2
- 返回no
- 定义一个函数non()。它将接收a,n。
- 如果n mod 2等于1,则
- s0 := 0, s1 := 0
- i := 0
- 当i < n时,执行:
- 如果a[i]等于'0',则s0 := s0 + 1
- 否则s1 := s1 + 1
- i := i + 1
- s := s0*s1*6
- 如果n mod 3等于0,则
- n1 := n/3
- n2 := n1*2
- i := 0
- 当i < n时,执行:
- 如果a[i]不等于a[(i+n1)mod n],则
- s := s - 2
- 如果a[i]不等于a[(i+n2)mod n],则
- s := s - 2
- i := i + 1
- 如果a[i]不等于a[(i+n1)mod n],则
- 否则,
- s00 := 0, s01 := 0, s10 := 0, s11 := 0, s := 0
- i := 0
- 当i < n时,执行:
- 如果a[i]等于'0',则s00 := s00 + 1
- 否则s01 := s01 + 1
- i := i + 2
- i := 1
- 当i < n时,执行:
- 如果a[i]等于'0',则s10 := s10 + 1
- 否则s11 := s11 + 1
- i := i + 2
- s := s + s00 * s01 * 8
- s := s + s10 * s11 * 8
- s := s + s00 * s11 * 4
- s := s + s10 * s01 * 4
- n1 := n/2
- i := 0
- 当i < n时,执行:
- 如果a[i]不等于a[(i + n1)mod n],则
- s := s - 2
- i := i + 1
- 如果a[i]不等于a[(i + n1)mod n],则
- 如果n mod 3等于0,则
- n1 := n/3
- n2 := n1*2
- i := 0
- 当i < n时,执行:
- 如果a[i]不等于a[(i+n1)mod n],则
- s := s - 2
- 如果a[i]不等于a[(i+n2)mod n],则
- s := s - 2
- i := i + 1
- 如果a[i]不等于a[(i+n1)mod n],则
- 返回s/2
- 在主方法中,执行以下操作:
- n := polygon的大小
- no := all(n) - non(polygon, n) /2
- 返回no
示例
让我们来看下面的实现以更好地理解:
def all(n): if n % 2 == 1: no = n*(n-1)/2 else: no = n*(n/2-1) if n % 3 == 0: no -= n/3*2 return no def non(a,n): if n % 2 == 1: s0 = s1 = 0 i = 0 while i < n: if a[i] == '0': s0 += 1 else: s1 += 1 i += 1 s = s0*s1*6 if n % 3 == 0: n1 = n/3 n2 = n1*2 i = 0 while i<n: if a[i] != a[int((i+n1)%n)]: s -= 2 if a[i] != a[int((i+n2)%n)]: s -= 2 i += 1 else: s00 = s01 = s10 = s11 = s = 0 i = 0 while i <n: if a[i] == '0': s00 += 1 else: s01 += 1 i += 2 i = 1 while i < n: if a[i] == '0': s10 += 1 else: s11 += 1 i += 2 s += s00 * s01 * 8 s += s10 * s11 * 8 s += s00 * s11 * 4 s += s10 * s01 * 4 n1 = n/2 i = 0 while i < n: if a[i] != a[int((i + n1)%n)]: s -= 2 i += 1 if n % 3 == 0: n1 = n/3 n2 = n1*2 i = 0 while i < n: if a[i] != a[int((i+n1)%n)]: s -= 2 if a[i] != a[int((i+n2)%n)]: s -= 2 i += 1 return s/2 def solve(polygon): n = len(polygon) no = all(n) - non(polygon,n)/2 return int(no) polygon = "111010" print(solve(polygon))
输入
1, 1000
输出
2
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP