斐波那契数列的变形(大众点评2015校园招聘测试岗的第一道编程题)
帮同学在线笔试做的,题目貌似是两个人同时从路两边开始给马路刷漆,一个人一天刷一米,另一个人一天刷3米。当马路长度为n米时,共有多少种刷法?
看到题目的第一反应是很熟悉,以前做过类似的,然后脑海中突然闪过斐波那契,在网上搜了一下斐波那契,毕竟时间久了,细节记不得了,很顺利的写出了递推公式,写了个递归就搞定了。
1 #include<iostream> 2 using namespace std; 3 int f(int n) 4 { 5 if(n==0) return 0; 6 if(n==3) return 2; 7 if(n==2) return 1; 8 if(n==1) return 1; 9 else 10 return f(n-1)+f(n-3); 11 12 } 13 int main() 14 { 15 int n,sum; 16 while(1) 17 { 18 cout<<"请输入道路长度n"<<endl; 19 cin>>n; 20 if(n>=0) 21 {sum=f(n); 22 cout<<"油漆工刷路的方法有"<<sum<<"种。"<<endl; 23 } 24 else 25 cout<<"输入错误,请重新输入"<<endl; 26 } 27 }
自己做了简单的测试,发现n的数值在200左右,结果出的就比较慢了。题目还要求写个白盒测试的完整用例。
现在知道的情况是同学进面试了。。。。
今天的我,是跟昨天不一样的我,是比昨天更好的我~