在Python中查找以n个三角形给出的唯一三角形

时间:2019-06-04 06:57:37

标签: python-3.x

给定n个三角形,我们需要找出给定三角形中有多少个唯一的三角形。对于每个三角形,我们给定三个整数a,b和c(三角形的边)。

如果没有其他具有相同边集的三角形,则认为三角形是唯一的。

样本输入:

1

样本输出:

34 5 32
15 20 6
4 2 3
5 6 9
15 20 6
34 5 32

说明:

每条线都是一个三角形,具有3个边。前两个三角形具有相同的边,因此它们是相同的(只是顺序不同)。即。两个三角形的边的总和相等。

第三个三角形“ 8 2 9”是唯一的,因为没有其他三角形具有完全相似的边。因此输出为1(唯一三角形的总数)

样本输入:

2

样本输出:

n = int(input())
arr = [list(map(int, input().split())) for x in range(n)]

def uniqueTriangle(arr):
  row = len(arr)
  col = len(arr[0])
  mp = {}
  hel = {}

  for i in range(row):
    tri = arr[i]
    tri.sort()
    strA = [str(x) for x in tri]
    strB = ''
    strB = strB.join(strA)
    if strB not in mp.values():
      mo[i] = strB
    else:
      hell[i] = strB

  count = 0
  for i in range(row):
    if i in mp:
      val = mp.get(i)
      if val not in hel.values():
        count = count + 1

  print (count)

此处的三角形“ 423”和“ 560”是唯一的。因此输出为2(唯一三角形的总数)

这就是我所做的...

{{1}}

为丑陋的代码表示歉意。但是如何使这段代码更好呢?

1 个答案:

答案 0 :(得分:1)

from collections import Counter

arr = [[7, 6, 5],[5, 7, 6],[8, 2, 9],[2, 3, 4],[2, 4, 3]]

def unique_triangles(arr):
    counter = Counter([frozenset(a) for a in arr])
    return len([res for res in counter if counter[res] == 1])
  1. 使用frozenset标记每个唯一的三角形集
  2. 使用collections.Counter计算在输入数组中找到的唯一集的数量
  3. 返回该设置仅出现一次