问题描述
还有另一种斐波纳契数:F(0)= 7,F(1)= 11,F(n)= F(n-1)+ F(n-2)(n> = 2)
输入
输入由一系列行组成,每行包含一个整数n。(n <1,000,000)。
输出
如果3均匀划分为F(n),则打印单词“yes”。
如果不是,打印单词“no”。
如果不是,打印单词“no”。
示例输入
0
1
2
3
4
5
示例输出
no
no
yes
no
no
no
这道题还是比较简单的, 一次过
但是在测试时候还是有遇到一些问题的。开始在main函数中数组定义到1000000,报错溢出,然后在网上查到了可以在main函数之前定义全局变量就不会报错了
#include <stdio.h>
int ans[1000100];
int main()
{
ans[0]=1;
ans[1]=2;
int n,i;
while(scanf("%d",&n)!=EOF)
{
for(i=2;i<=n;i++)
{
ans[i] = (ans[i-1]+ans[i-2])%3;
}
if(ans[n]==0)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
在网上还看到了一些大神的做法,通过找规律更简单地就能求解出来:
i 0 1 2 3 4 5 6 7 8 9 10 11 12 13
ans 1 2 0 2 2 1 0 1 1 2 0 2 2 1
print no no yes no no no yes no no no yes no no no
就可以得到了规律:从第2个开始每隔4个循环一次。
- #include<stdio.h>
- int main()
- {
- int n;
- while(scanf("%d",&n))
- {
- if((n-2)%4!=0)
- printf("no\n");
- else
- printf("yes\n");
- }
- return 0;
- }