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

如何用Java实现逐次减最大斐波那契数至0并输出对应索引

代码问题排查与修正

核心错误点

  • 没有导入java.util.Scanner,代码会直接编译失败
  • 找最大斐波那契数的逻辑错误:当前代码是从小到大遍历斐波那契数组,判定条件也不符合需求,应该从大到小遍历,找第一个小于等于当前剩余值的斐波那契数
  • 数值计算逻辑错误:找到目标斐波那契数后,错误减去了前一项的值,存储的索引也错误偏移了1位
  • 没有循环执行查找逻辑:只遍历了一次斐波那契数组,没有在减去数值后重新查找下一个最大斐波那契数
  • 没有按要求输出最终的索引集合

修正后的可运行代码

import java.util.Scanner;

class Main {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] fibo = new int[1000];
        // 按需求定义斐波那契数列:第1项1,第2项2,后续项为前两项之和
        fibo[1] = 1;
        fibo[2] = 2;
        // 预先计算足够多的斐波那契数,前30项足够覆盖普通整数取值范围
        for (int i = 3; i <= 30; i++) {
            fibo[i] = fibo[i - 1] + fibo[i - 2];
        }
        int remain = n;
        int idx = 0;
        int[] res = new int[100];
        // 循环直到剩余值归0
        while (remain > 0) {
            // 从大到小查找最大的小于等于当前剩余值的斐波那契数
            for (int i = 30; i >= 1; i--) {
                if (fibo[i] <= remain) {
                    res[idx++] = i;
                    remain -= fibo[i];
                    break;
                }
            }
        }
        // 按要求输出索引
        for (int i = 0; i < idx; i++) {
            System.out.print(res[i] + " ");
        }
    }
}

验证结果

输入88时,输出为9 7 5 3 1,和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:05