thinking:
1.Fibonacci ,那就得把Fibonacci数表达出来;
method_1:用递归;
method_2: 用数字相加;
2.想得到最小步数,就得求出最接近的Fibonacci数;method_1: 通过递归求出,通过判断递归出数的值,与输入值比较,锁定左右两值;
method_2: 通过两变量相加等于较大值较小值等于原来较大值,较大值大于输入值时,即两变量为左右两值;
3.通过判断左右两值与输入值相减的绝对值大小,较小的为最小步数;method_1:用较大值减输入值,输入值减去较小值;
method_2:直接用用绝对值(abs);
//method 1 #include<iostream> using namespace std; //写出递归 int Fiboncci(int n) { if(n<=1) return n; if(n>1) return Fibonacci(n-1)+Fibonacci(n-2); } //写出比较值 int _compare(int num,int lesser,int larger) { int step=num-lesser; if(step>(larger-num)) step=larger-num; return step; } int main() { int num,lesser,larger; cin>>num; //从最小开始用递归计算出每个Fibonacci数; for(int i=0;i<num;++i) { lesser=Fibonacci(i); larger=Fibonacci(i+1); //进行判断 if(larger>num) break; } int step=_compare(num,lesser,larger); cout<<step<<endl; return 0; }
//method 2: #include<iostream> using namespace std; int main() { int lesser=0,larger=1; while(larger<num) { int temp=larger; larger=lesser+larger; lesser=temp; } int step=num-lesser; if(step>larger-num) step=larger-num; return step; }