如何用JavaScript查找乘积相同的整数二元组对(2-pairs)
如何用JavaScript查找所有乘积相同的整数二元组对?
嘿,我来帮你搞定这个问题!要找出所有乘积相同且四个元素都不重复的整数二元组对,咱们可以一步步来实现,下面是完整的方案和可直接运行的代码:
核心思路
先给你理清楚背后的逻辑,这样你也能明白代码为什么这么写:
- 处理用户输入:网页加载后自动弹出弹窗,让用户输入整数数组,同时做格式校验,确保输入的是1到1024之间的整数
- 生成唯一二元组:遍历数组生成所有
a≠b的二元组,用a < b的方式避免重复生成(2,3)和(3,2)这种元素重复的二元组 - 按乘积分组:用Map把所有二元组按乘积归类,这样同一乘积的二元组会被放在一起,方便后续查找
- 筛选符合条件的2-pairs:遍历每个乘积对应的二元组列表,找出所有两两组合,并且确保这两个二元组的四个元素都不重复,这样就得到了我们要的结果
完整代码实现
把这段代码放到HTML的<script>标签里,网页打开后就会自动触发弹窗:
window.onload = function() { // 弹出输入框获取用户输入 let inputStr = prompt("请输入整数数组(格式示例:[1,2,3,7,8,9,6]):"); if (!inputStr) { alert("你还没输入内容呢!"); return; } try { // 处理输入格式:去掉所有空格,确保JSON能正确解析 inputStr = inputStr.replace(/\s/g, ''); let nums = JSON.parse(inputStr); // 验证输入是否符合要求:必须是数组,元素都是1-1024的整数 if (!Array.isArray(nums) || nums.some(num => !Number.isInteger(num) || num < 1 || num > 1024)) { throw new Error("输入必须是1到1024之间的整数数组哦!"); } // 生成所有a < b的二元组,确保a≠b且不重复 let pairs = []; for (let i = 0; i < nums.length; i++) { for (let j = i + 1; j < nums.length; j++) { pairs.push([nums[i], nums[j]]); } } // 用Map按乘积分组二元组 let productMap = new Map(); for (let pair of pairs) { let product = pair[0] * pair[1]; if (!productMap.has(product)) { productMap.set(product, []); } productMap.get(product).push(pair); } // 筛选出符合条件的2-pairs let result = []; for (let [product, pairList] of productMap) { // 只有当同一乘积下有至少2个二元组时才可能形成2-pairs if (pairList.length >= 2) { // 生成所有两两组合 for (let m = 0; m < pairList.length; m++) { for (let n = m + 1; n < pairList.length; n++) { let pair1 = pairList[m]; let pair2 = pairList[n]; // 检查四个元素是否完全不重复 let allElements = new Set([...pair1, ...pair2]); if (allElements.size === 4) { result.push([pair1, pair2]); } } } } } // 输出结果 if (result.length === 0) { alert("没有找到符合条件的2-pairs哦!"); } else { let output = "找到的符合条件的2-pairs:\n"; result.forEach((group, idx) => { output += `${idx + 1}. [(${group[0][0]}, ${group[0][1]}), (${group[1][0]}, ${group[1][1]})]\n`; }); alert(output); // 同时在控制台输出,方便你调试查看 console.log("符合条件的2-pairs:", result); } } catch (error) { alert(`输入出错啦:${error.message}`); } };
代码关键点说明
- 输入校验:不仅解析数组,还检查每个元素是否在1-1024范围内,严格符合题目要求
- 避免重复二元组:用
i < j生成二元组,这样每个二元组只出现一次,不会有(2,3)和(3,2)这种无效重复情况 - 元素唯一性检查:用
Set来判断四个元素是否都不重复,确保满足a≠b≠c≠d的核心条件 - 友好的输出:用弹窗展示结果,同时控制台也会输出,方便你调试和查看详细数据
比如你输入示例中的[1,2,3,7,8,9,6],代码会找出[(2,9), (3,6)]这一组,因为它们的乘积都是18,且四个元素都不重复。
内容的提问来源于stack exchange,提问作者user9138698
相关产品推荐
相关产品推荐

