【发布时间】:2018-03-13 21:54:00
【问题描述】:
我很难找到解决这个问题的方法。我需要编写一个迭代(不能使用递归)解决方案来解决用户通过扫描仪输入数字(例如 10)并打印 2 个“以前的”Fib 数字的问题。
对于输入“10”的例子,它将是:
5
8
因为它们是 10 之前“最大”的两个 Fib 数字。
如果输入是 13,它将打印:
8
13
由于 13 本身就是一个 Fib 数字,所以它只先打印 1 个数字,然后再打印它自己。
现在我知道如何迭代地找到“第 n 个”Fib 号码,但我无法想到一个解决方案来运行直到给定数字(而不是第 n 个 Fib 号码)并以某种方式只打印在它之前的最后 2 个(或者,如果给定的数字本身就是一个 Fib 数字,那么也算作一个)。
现在我知道使用完美正方形的公式 - 但不幸的是,不能使用它...
编辑,因为它让一些人感到困惑:
我不要求提供代码,也不希望任何人为我解决这个问题。我只是真的想了解如何处理这些问题。
编辑#2:
这是我写的代码:
int a = 0;
int b = 1;
while (a < num) {
int temp = a;
a = a + b;
b = temp;
}
System.out.println(b);
System.out.println(a);
我遇到的问题是,如果 num 输入确实是 Fib num - 它会按预期工作,否则,它会打印 1 个之前的 Fib num 和下一个,因此对于输入“10”,它会打印 8 和13.
【问题讨论】:
-
Stack Overflow 是一个问答网站,而不是家庭作业写作服务。如果你认为我们会为你做功课,那你就大错特错了。 An open letter to students with homework problems
-
@JoeC 虽然我非常理解您的观点和这封信,但我确实进行了研究,并且知道不同的方法。我不要求完整的代码,只是帮助理解正确的方法以及如何处理此类问题。
-
那么你需要edit你的问题来显示所有这些。就目前而言,这似乎是一个“给我代码”的问题,如果没有证据表明已经做出努力,你就有可能被关闭。
-
我的方法——在考虑编写代码之前广泛在纸上找出逻辑。玩数学,阅读大量纸,它通常会出现在你身上。
-
我不明白这个问题。你说你已经有了一个计算所有 Fibs 迭代的公式。然后这样做并在到达某个大于等于输入的 Fib 时停止。发生这种情况时,输出你总是记住的最后两个计算的 Fib。如果该描述没有帮助,您可能需要特定解决方案。但这只有在您先向我们展示您的代码时才有可能。