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

如何从数组中获取和为3的倍数的正确数对?

解决数组中找和为3的倍数的不重复数对问题

你的问题出在重复计数——大概率是代码里没限制数对的唯一性,把(i,j)和(j,i)当成两个不同数对统计了,或者没排除同一元素重复使用的情况。下面给两种正确的实现逻辑:

方法一:数学组合法(高效)

先把数组元素按模3的余数分成三类:余0、余1、余2。符合条件的数对只有两种情况:

  1. 两个余0的元素相加(0+0=0,是3的倍数)
  2. 一个余1和一个余2的元素相加(1+2=3,是3的倍数)

直接通过组合数计算总数,不用遍历所有数对,效率更高:

const arr = [1, 3, 2, 6, 1, 2];
let count0 = 0, count1 = 0, count2 = 0;

// 统计各类余数的元素数量
for (const num of arr) {
  const mod = num % 3;
  if (mod === 0) count0++;
  else if (mod === 1) count1++;
  else count2++;
}

// 计算符合条件的数对总数
const total = (count0 * (count0 - 1)) / 2 + count1 * count2;
console.log(total); // 输出5

方法二:遍历验证法(直观)

如果需要看到具体的数对,可以用双重循环,限制内层循环从外层索引的下一位开始,确保每个数对只被统计一次:

const arr = [1, 3, 2, 6, 1, 2];
let count = 0;

for (let i = 0; i < arr.length; i++) {
  // j从i+1开始,避免重复统计(i,j)和(j,i)
  for (let j = i + 1; j < arr.length; j++) {
    if ((arr[i] + arr[j]) % 3 === 0) {
      count++;
      console.log(`符合条件的数对:(${arr[i]}, ${arr[j]})`);
    }
  }
}

console.log('总数:', count); // 输出5

两种方法都能得到预期的5个数对,其中遍历法打印的具体数对是:

  • (1,2)、(1,6)、(3,6)、(1,2)、(1,2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:34:57