今天晚上做了两道OJ题,其中寻找能被3整除的斐波拿契数一直不通过,明明给的例子都能通过,我甚至怀疑机器出错了。后面看了看报错原因:complie error,runtime。猜测估计是时间复杂度过大,还没算了算的确递归的复杂度过大,于是换为迭代,结果还是不通过。然后又重新读题,发现规模n在1-100000,突然焕然大悟,问题出在存储长度。果然看似简单的题也不能掉以轻心啊,多注意时间复杂度和规模!!
原题描述:
解题思路:
1.分析规模和时间复杂度
2.使用迭代,并且除以3来减少数据长度
3.判断输出
#include<iostream>
using namespace std;
bool f(int n){
int a=7;
int b=11;
int c;
if(n==0)return false;
if(n==1)return false;
for(int i=2;i<=n;i++){
c=(a+b)%3;
a=b%3;
b=c%3;
}
if(c==0)
return true;
else
return false;
}
int main(){
int n;
while(cin>>n){
if(f(n))cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}