hdu 1021 Fibonacci Again 斐波那契数列

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为周期去做

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值