Fibonacci Again 斐波那契数列
添加链接描述
法1 F(N)%3=(F(N-1)%3+F(N-2)%3)%3
(运用到模运算)
#include <stdio.h>
#include <stdlib.h>
int F(int n){
if(n<2)
{
if(n==0)
return 7;
else if(n==1)
return 11;
else
return 3;
}
else
{ int a=7;
int b=11;
int sum=0;
n--;
while(n--)
{
sum += a+b;
a=b;
b=sum;
}
return sum;
}
}
int main()
{ int n;
while(scanf("%d",&n)!=EOF)
{
if(F(n)%3==0)
printf("yes\n");
else
printf("no\n");
}
return 0;
}
法2 找规律
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
if((n-2)%4==0) printf("yes\n");
else printf("no\n");
}
return 0;
}
老师视角1
#include <bits/stdc++.h>
using namespace std;
// int f[15] = {1, 2, 0, 2, 2, 1, 0, 1, 1, 2};
int main(){
int n;
while(scanf("%d", &n) == 1){
printf("%s\n", n%4==2?"yes":"no");
}
return 0;
}
//原理:
这里最终是要可用为3整数的数
其实这类题就是找规律的——因为和mod(整除)有关
看数据:下面是f(0)%3,f(1)%3…的数据,显 然0就是可以整除的了
数据: 1 2 | 0 2 2 1 | 0 1 1 2 | 0 2 2 1 | 0 1 1 2 …
n : 0 1 2 3 4 5 6 7 8 9 10111213 14151617
可以观察到| 0 2 2 1 | 0 1 1 2 |是循环的
我们这里可以进一步说| 0 * * * |是循环的
周期为4
知道这个程序就好写了。
将n视为位置
n - 2是将偏移的基地址设置为n = 2处(这里是可以整除的)
在n - 2的基址上偏移0的位置上的f(n)就是为可以整除的
(n - 2) % 4 == 0就是上面所说话的实现
老师视角2
#include <bits/stdc++.h>
using namespace std;
int f[15] = {1, 2, 0, 2, 2, 1, 0, 1, 1, 2};
int main(){
int n;
while(scanf("%d", &n) == 1){
printf("%s\n", f[n%8]==0?"yes":"no");
}
return 0;
}
以8为周期去做