【问题标题】:I want to subtract the largest possible number from the Fibonacci sequence by decreasing it in我想通过减少它从斐波那契数列中减去最大可能的数字
【发布时间】:2021-12-24 14:22:26
【问题描述】:

我想从用户那里得到n,然后通过依次递减斐波那契数列减去最大可能数,然后继续这个过程,直到它达到零。我们的斐波那契数列从 1 开始。数字 88 可以是 1 + 3 + 8 + 21 + 55 的形式写道,这些数字分别是斐波那契数列的句子 1、3、5、7 和 9。

输入:88

输出:9 7 5 3 1

我的代码:

class Main {
    public static void main(String args[]) {
        Scanner input = new Scanner(System.in);

        int n = input.nextInt();
        int[] fibo = new int[1000];
        int[] arr = new int [100];
        int d = 0;
        int b = 0;
        fibo[1] = 1;
        fibo[2] = 2;

        for (int i = 3, j = 1; i <= 20; i++, j++)
            fibo[i] = fibo[i - 1] + fibo[i - 2];

        b = n;

        for (int i = 1, j = 1; i <= 20 && b >= 0; i++, j++) {
            if (b == fibo[i] || b + 1 == fibo[i] || b - 1 == fibo[i]) {
                d = i;
                b -= fibo[d - 1];
                System.out.println("B= " + b);
                arr[j] = d - 1;
                System.out.println("arr= " + arr[j]);
            }
        }
    }
}

【问题讨论】:

  • 一个直接的提示:您似乎认为 Java 中的数组是从 1 开始索引的,但实际上它们是从 0 开始的。

标签: java fibonacci


【解决方案1】:

第一个问题是,每次你从数字中减去一些东西时,你要减去的下一个数字必须更小——因为你的数字本身现在更小了——而在你的代码中,数字只会越来越大。

例如,在您尝试第 9 个斐波那契数 55 后,您正在尝试 89,而您应该尝试 34。

这可以通过向后迭代斐波那契数来解决,例如从数组末尾的最大数开始,这样随着循环迭代,数字会变小。

第二个问题是你在 if 语句中的检查,只有当恰好有一个斐波那契数与你所在的数字非常接近时才会满足。

相反,如果您想选择小于您的数字的最大斐波那契数,您可以只检查“小于您的数字”部分,因为“最大的斐波那契”部分已经被如何处理for 循环有效。

这是工作代码。您还会注意到变量减少了很多。此外,我对输入数字进行了硬编码以进行测试,您必须重新添加扫描仪的内容。抱歉。

public class Main {
    public static int len = 20; // the program considers this many fibonacci numbers
    
    public static void main(String args[])
    {
        int n = 88;
        int[] fibo = new int[len];
        
        for(int i=0; i<len; i++)
        {
            if (i < 2) fibo[i] = i+1; // for 1 and 2
            else fibo[i] = fibo[i-1] + fibo[i-2]; // for 3 and 5 and ...
        }
        
        for(int i=len-1; i>=0; i--)
        {
            if (fibo[i] <= n)
            {
                System.out.format("%d: %d - %d = %d\n",
                    i+1, // to correct for 0-indexing
                    n, fibo[i], n-fibo[i]);
                n -= fibo[i];
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2020-01-18
    • 2015-06-05
    相关资源
    最近更新 更多