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

基于自然数因数个数重排整数数组(要求用for循环实现)

按自然数因数个数重排数组(基于for循环实现)

直接给你修复并完成后的代码,完全用for循环实现排序逻辑:

var number = 1; // 初始化非0值,确保进入输入循环
var array = [];
while (number != 0) {
    number = +prompt("Input a natural number:");
    if (number != 0 && Number.isInteger(number) && number > 0) { // 增加自然数合法性校验
        array.push(number);
    } else if (number !== 0) {
        alert("请输入正自然数!");
    }
}

// 用两层for循环实现冒泡排序:按因数个数从小到大排序
for (var i = 0; i < array.length - 1; i++) {
    for (var j = i + 1; j < array.length; j++) {
        // 比较两个元素的因数个数
        if (numOfFactors(array[i]) > numOfFactors(array[j])) {
            // 交换两个元素的位置
            var temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}

console.log("排序后的数组:", array);

// 计算单个自然数的因数个数
function numOfFactors(a) {
    var factors = 0; // 将计数器移至函数内部,每次调用自动重置
    for (var i = 1; i <= a; i++) { // 从1遍历到目标数,逻辑更直观
        if (a % i === 0) {
            factors++;
        }
    }
    return factors;
}

关键修改&说明:

  • 修复因数计数bug:原来的factors是全局变量,每次调用会累加之前的结果,现在移到函数内部,每次计算都从零开始计数。
  • 修正排序参数错误:你之前调用numOfFactors(i)传的是数组下标,实际应该传数组里的元素array[i]/array[j]。
  • 补全两层循环排序逻辑:内层循环从i+1开始,逐个比较当前元素和后续元素的因数个数,若前者因数更多则交换位置,最终实现升序排序(匹配你给出的示例输出)。
  • 增加输入校验:避免用户输入负数、小数等非自然数的情况。
  • 清理无用代码:删掉了多余的numOfFactors(number)调用和无效的console.log(factors)。

测试你给出的示例输入[6,16,7],运行后会输出[7,6,16],完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:15:33