【HDU】1021 Fibonacci Again

问题描述
还有另一种斐波纳契数: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”。
 
示例输入
 
 
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个循环一次

[cpp]  view plain  copy
  1.  #include<stdio.h>  
  2. int main()  
  3. {  
  4.  int n;  
  5.  while(scanf("%d",&n))  
  6.  {  
  7.   if((n-2)%4!=0)  
  8.    printf("no\n");  
  9.   else  
  10.    printf("yes\n");  
  11.  }  
  12.  return 0;  
  13. }  

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值