关于斐波那契数的程序
Program about Fibonacci numbers
我有义务编写程序,该程序将显示最少数量的斐波那契数,其总和等于用户写入程序k
数。
因此,例如用户写入1070
程序将显示987 89 -5 -1
(因为所有这些数字都是斐波那契数(您可以加减以获得所需的总和)。
我有问题要考虑解决这个问题的方法。
我编写了代码来获取从 0 到 46 的所有斐波那契数。
#include <iostream>
unsigned long long Fibbo[47];
void preapare()
{
Fibbo[0] = 0;
Fibbo[1] = 1;
i = 2;
while (i<47)
{
Fibbo[i] = Fibbo[i - 1] + Fibbo[i - 2];
i++;
}
}
int main()
{
preapare();
int k=0;
std::cin >> k;
}
我会很高兴得到任何帮助。您可以多次使用斐波那契数。例如,你可以做 1+1+1+1+1<</p>
#include <iostream>
#include <vector>
#include <stdlib.h>
using namespace std;
void prepare( vector<int> & fibos ) { ... } // along the lines we see in OPs code
int findClosest( int n, vector<int> & fibos ){ // return Fibonacci number closest to n
int fi = 0;
for( std::vector<int>::iterator it = fibos.begin() ; it != fibos.end(); ++it){
if( abs(*it - n) < abs(fi - n) ){
fi = *it;
}
}
return fi;
}
// The algorithm:
// lookup closest Fi, add "signed" to terms
// reduce n, adjust sign and call recursively
void sum( int n, vector<int> & fibos, vector<int> & terms, int sign = 1 ){
if( n == 0 ) return;
int fi = findClosest( n, fibos );
terms.push_back( sign*fi );
sum( abs(n - fi), fibos, terms, n - fi > 0 ? sign : -sign );
}
int main() {
vector<int> fibos;
prepare( fibos );
vector<int> terms;
int n = 1070;
sum( n, fibos, terms );
cout << n << " =";
for( std::vector<int>::iterator it = terms.begin() ; it != terms.end(); ++it){
cout << " " << *it;
}
cout << endl;
return 0;
}
对于用户输入:
在 while 循环之前,您需要获取输入,将其保存到变量中,并在 while 条件下使用它。像这样:
#include <iostream>
...
int k_val = 0;
std::cout << "Enter the value for k: ";
std::cin >> k_val;
...
您的prepare()
已修复:
unsigned long long* preapare(const size_t n) {
unsigned long long* Fibbo = new unsigned long long[n];
Fibbo[0] = 0;
Fibbo[1] = 1;
for(size_t i = 2; i < n; ++i) {
Fibbo[i] = Fibbo[i - 1] + Fibbo[i - 2];
}
return Fibbo;
}
然后,您必须对返回的数组进行内存管理;
我已经这样做了,代码将求解要添加的刨丝器斐波那契数,因此结果将是指定的数字:
fiboMax 返回一个斐波那契数小于输入数的序列。getiboSec 返回一个序列,其中包含与输入数字相加的较大斐波那契数。
'''
Created on 15/01/2014
'''
def fiboMax(num):
ret = [0,1]
a = 1
b = 2
while b < num:
ret.append(b)
tmp = a + b
a = b
b = tmp
return ret
def getFiboSec(num):
fiboSec = []
fiboNumbers = fiboMax(num)
i = len(fiboNumbers) - 1
while num > 0 and i > 0:
fiboNum = fiboNumbers[i]
while(fiboNum <= num):
fiboSec.append(fiboNum)
num -= fiboNum
i -= 1
return fiboSec
if __name__ == '__main__':
num = 20
print(fiboMax(num))
print(getFiboSec(num))
输出:
figonnaci number to 20 = [0, 1, 2, 3, 5, 8, 13]
fibonacci number that sum 20 = [13, 5, 2]
它不适用于负数,无论如何它解决了问题,但不是有效的方法。
您正在访问循环中的索引 -2 和 -1。变量i
应从 2 开始。您还可以尝试向指针添加值。未设置Fibbo[]
中的任何值。
相关文章:
- 反向斐波那契数列
- 为什么我的程序不能显示斐波那契级数?
- 斐波那契数列部分和的最后一位数字
- C++:Constexpr斐波那契数列评估
- 将第 n 个斐波那契数的大斐波那契数的最后一位编程.C++
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 从斐波那契序列 c++ 中的数组中查找正确的元素时出错
- 模板元编程来计算斐波那契
- 斐波那契数模 m.
- 如何使用斐波那契和递归函数检查矩形是否是黄金矩形?
- 斐波那契数的递归函数
- 为什么其中一个斐波那契序列的动态编程实现比另一个更快
- 此外,在计算大斐波那契数时存在精度误差
- 如何指示/打印基于斐波那契数字的程序的不同组合
- C 斐波那契程序
- 关于斐波那契数的程序
- C++斐波那契程序
- 使用while循环计算前n个斐波那契数的程序
- 令人困惑的斐波那契数程序
- 阵列分割错误在斐波那契数程序