在Python中计算分数对的数量,它们的总和为1
假设我们有一个分数列表,其中每个分数都是独立的列表[numerator,denominator],表示数字(numerator / denominator)。我们必须找出总和为1的分数对的数量。
因此,如果输入为fractions = [[2, 7],[3, 12],[4, 14],[5, 7],[3, 4],[1, 4]],则输出将为4,因为(2/7 + 5/7),(3/12 + 3/4),(3/4 + 1/4),(4/14 + 5/7)是总和为1的四对。
要解决此问题,我们将按如下步骤执行:
- d:一个新图
- ans:0
- 对于fractions中的每个分数i,请执行以下操作:
- x:i [分子]
- y:i [分母]
- g:(x,y)的gcd
- x:x / g
- y:y / g
- temp_x:y-x
- temp_y:y
- 如果(d中的temp_x,temp_y)存在,则
- ans:= ans + d[temp_x,temp_y]
- d[x,y]:=1 +(可用时d [(x,y)],否则为0)
- 返回答案
让我们看以下实现,以获得更好的理解:
示例代码
class Solution:
def solve(self, fractions):
import math
d = {}
ans = 0
for i in fractions:
x = i[0]
y = i[1]
g = math.gcd(x, y)
x /= g
y /= g
temp_x = y - x
temp_y = y
if (temp_x, temp_y) in d:
ans += d[(temp_x, temp_y)]
d[(x, y)] = d.get((x, y), 0) + 1
return ans
ob = Solution()
fractions = [[2, 7],[3, 12],[4, 14],[5, 7],[3, 4],[1, 4]]
print(ob.solve(fractions))
输入
[[2, 7],[3, 12],[4, 14],[5, 7],[3, 4],[1, 4]]
输出
4