这道题开始一看时斐波那契数列题,然后就直接写了。得到下面代码
#include <iostream>
using namespace std;
int fn(int n)
{
if (n == 0)
return 7;
else if (n == 1)
return 11;
else
return fn(n - 1) + fn(n - 2);
}
int main()
{
int m,a;
while (cin >> m)
{
a = fn(m);
if (a % 3 == 0)
{
cout << "yes"<<endl;
}
else
{
cout << "no" << endl;;
}
}
}
提交发现超时了。想想也是这种题目一般都是要找规律的。所以尝试把前100个都输出来看看找找规律;于是得到下面代码
#include <iostream>
using namespace std;
int fn(int n)
{
if (n == 0)
return 7;
else if (n == 1)
return 11;
else
return fn(n - 1) + fn(n - 2);
}
int main()
{
int a;
for (int i = 2; i < 100; i++)
{
a = fn(i);
if (a % 3 == 0)
{
cout << "yes" <<" ";
}
else
{
cout << "no" << " ";;
}
}
}
到这里虽然可以发现规律但是发现整个代码运行时间代码了。递归运算实在是太慢了。
最后修改一下代码。使用非递归的方法看看整个数字什么样。
#include <iostream>
using namespace std;
int fn(int n)
{
if (n == 0)
return 7;
else if (n == 1)
return 11;
else
return fn(n - 1) + fn(n - 2);
}
int main()
{
int f[100000];
f[0] = 7; f[1] = 11;
for (int i = 2; i < 100;i++)
{
f[i] = f[i - 1] + f[i - 2];
if (f[i] % 3 == 0)
{
cout << "yes"<<" ";
}
else
{
cout << "no" <<" ";;
}
}
}
最后可以写出整个代码简单的
#include<iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
if ((n - 1) % 4 == 1)
{
cout << "yes" << endl;
}
else
{
cout << "no" << endl;
}
}
return 0;
}