寻找能被3整除的斐波拿契数问题

今天晚上做了两道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;
}

猜你喜欢

转载自blog.csdn.net/qq_44654974/article/details/105230206