求修复乘法组合数组代码:实现数对正逆序完整输出
修复乘积数对生成代码,同时输出正序与逆序组合
需求:用户输入一个大于1的数字,输出所有乘积等于该数字的数对组合(包含正序和逆序,例如输入7需输出
(1,7)(7,1)),但现有代码仅能输出逆序的数对,需要修复。
原代码存在的问题
- 循环变量逻辑错误:
for循环中使用++input作为递增条件,直接篡改了输入值,导致循环完全偏离预期;同时初始i=0会触发除以0的错误。 - 数对收集不完整:仅生成了
(r, i)形式的逆序数对,未添加正序的(i, r)组合。 - 外层循环冗余:重复声明
input和arr变量,初始输入判断逻辑无效。
修复后的代码
// 持续获取有效输入,直到用户输入<=1退出 while (true) { var input = parseInt(prompt("Please enter a number larger than 1")); if (input <= 1) { console.log("Goodbye!"); break; } var pairs = []; // 遍历1到输入值的所有整数,寻找因数 for (var i = 1; i <= input; i++) { // 判断当前i是否是输入值的因数 if (input % i === 0) { var partner = input / i; // 添加正序数对 pairs.push(`(${i}, ${partner})`); // 当两个因数不相等时,添加逆序数对,避免重复(如4的(2,2)仅保留一次) if (i !== partner) { pairs.push(`(${partner}, ${i})`); } } } console.log("The multiplicative combination(s) are: " + pairs.join(" ") + "."); }
代码说明
- 输入逻辑优化:用
while(true)循环持续获取输入,输入<=1时直接退出并提示,避免原代码中变量重复声明的混乱。 - 循环范围修正:
for循环从i=1开始遍历到输入值,既避免除以0的错误,又能覆盖所有可能的因数。 - 完整数对生成:找到因数
i后,先添加正序的(i, partner),当两个因数不相等时再添加逆序组合,既满足需求又避免重复数对(如平方数的情况)。 - 输出格式简化:直接生成带括号的数对字符串,用空格拼接后输出,完全符合预期格式。
内容的提问来源于stack exchange,提问作者codingstudentwhoneedshelp
相关产品推荐
相关产品推荐

