问题 B: Fibonacci Again
时间限制: 1 Sec 内存限制: 16 MB提交: 135 解决: 35
[ 提交][ 状态][ 讨论版]
题目描述
输入
输出
Print the word "no" if not
样例输入
0
1
2
3
4
5
样例输出
no
no
yes
no
no
no
提示
刚开始看见1000000这个数就知道不是简单的斐波那契问题,但是不知道怎么处理,后来看了别人的代码,知道了这个是有规律的,就是每八个是一个循环,基于这个,代码如下
#include<stdio.h>
int main()
{
int a[8]={7,11};
int b[8];
int n,i;
for(i=0;i<8;i++)
{
if(i==0||i==1)
b[i]=a[i]%3;
else
{
a[i]=a[i-1]+a[i-2];
b[i]=a[i]%3;
}
}
while(scanf("%d",&n)!=EOF)
{
if(b[n%8]==0)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
还有一种是这样写的
#include<stdio.h>
int a[1000005];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
a[0]=7;
a[1]=11;
if(n<2)
printf("no\n");//简单题要注意特殊数据。
else
{
for(int i=2;i<=n;i++)
{
a[i]=(a[i-1]+a[i-2])%3;
}
if(a[n]%3==0)
printf("yes\n");
else
printf("no\n");
}
}
return 0;
}
感觉应该跟上边的原理一样,对3求余一定是0,1,2之间的数,所以为0则为可以整除
个人建议还是理解下边这个,思路更一般些