如何用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
相关产品推荐
相关产品推荐

