You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组中满足元素和等于积的数对计数及输入处理问题

问题解决方案

1. 效率优化:数学公式变形

先对等式 A[J] + A[I] = A[J] * A[I] 做代数变形:

移项得:A[J]*A[I] - A[J] - A[I] = 0
两边加1配平:(A[J]-1)*(A[I]-1) = 1

整数范围内,两个数相乘等于1的情况只有两种:

  • 两个因子都是1 → 对应A[J]=2且A[I]=2
  • 两个因子都是-1 → 对应A[J]=0且A[I]=0

因此无需双重循环,只需统计数组中0的个数count0和2的个数count2,满足条件的数对数量直接通过组合数计算:
count0*(count0-1)//2 + count2*(count2-1)//2
(注:此公式计算无序数对,与示例输出匹配;若需统计有序数对,可改为count0*count0 + count2*count2 - count0 - count2,即排除i=j的情况,允许i=j则直接用count0*count0 + count2*count2)

2. 输入读取限制

读取输入时,先获取N,再读取数组并截取前N个元素,确保只读取指定数量的元素:

n = int(input())
# 读取输入的数字列表,强制取前n个元素
arr = list(map(int, input().split()))[:n]

3. 语法错误修正

原代码中pairs+1是无效操作——它仅计算数值但未赋值回变量,正确写法是pairs += 1(等价于pairs = pairs + 1)。不过使用上述优化后的统计方法,无需循环计数,直接计算即可。

完整可运行代码

n = int(input())
arr = list(map(int, input().split()))[:n]

count0 = 0
count2 = 0

for num in arr:
    if num == 0:
        count0 += 1
    elif num == 2:
        count2 += 1

# 计算无序数对数量(匹配示例输出)
result = count0 * (count0 - 1) // 2 + count2 * (count2 - 1) // 2
print(result)

测试示例输入:

3
2 4 2

输出:1,与示例一致。

内容的提问来源于stack exchange,提问作者Mosaab Barghouthy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:40:40