【暑假测试2】A HDU 1021 Fibonacci Again(水:递推、找规律)
2015-07-28 22:07
429 查看
题意
另一种形式的斐波拉契数列是这样的:F(0) = 7, F(1) = 11, F(n) = F(n-1) + F(n-2) (n>=2). ,当输入一个 n (n < 1000000 ),输出对应的 F(n) 是否能被 3 整除,按实际输出“yes”或者“no”。思路
(1)一开始的想法是弄一个数组,递推出每个值。再根据 n 的值索引找到对应的值,然后除以三,看余数是否为零。但这种思路太天真了,数组绝对会炸。遂放弃。(2)第二种思路源于第一种,既然存的值太大会炸,那就把多余的部分去掉好了,F(0) 存余数1, F(1) 存余数2。。。然后递推出每个值。再根据 n 的值索引找到对应的值,然后除以三,看余数是否为零。这个方法能够 AC,详见方法一。
(3)第三种路源于第二种,直接找规律,F(0) 存余数1, F(1) 存余数2,F(2) 存余数0,F(3) 存余数2,F(4) 存余数2,F(5) 存余数1,F(6) 存余数0,F(7) 存余数1.。。。往后就是 1、2、0、2、2、1、0、1 重复,详见方法二。
方法一
#include <stdio.h> int a[1000100] = {1, 2}; int main() { int n,i; for(i = 2; i < 1000100; i++) { a[i] = ( a[i-1] % 3 + a[i-2] % 3) % 3; } while ( scanf("%d", &n) != EOF ) { printf( a ? "no\n" : "yes\n"); } return 0; }
方法二
#include <stdio.h> int main(){ int n; while( scanf("%d", &n) != EOF ){ if ( n % 4 == 2 ){ puts("yes"); } else { puts("no"); } } return 0; }
相关文章推荐
- c语言中time函数的用法 http://blog.csdn.net/wangluojisuan/article/details/7045592
- hdu5319Painter 模拟
- 2015 Multi-University Training Contest 3 1002
- 全局变量,static ,extern(cp:http://blog.csdn.net/it_youhun/article/details/8526147)
- LeetCode#11 Container With Most Water
- 2015 Multi-University Training Contest 3 hdu 5326 Work
- LeetCode 11 Container With Most Water
- hdu 5319 Painter(15多校第三场1004)
- hdu 5319 Painter(水)
- Contains Duplicate
- Hdu 2015 Multi-University Training Contest3
- tinyxml 使用说明http://blog.csdn.net/zww0815/article/details/8083550
- leetcode之路011 Container With Most Water
- 2015 Multi-University Training Contest 3 hdu 5316 Magician
- HDU5319.Painter
- FirstChildElement() http://baike.baidu.com/link?url=VdlvQlGU-NGLshFepuft_u3MRdjZ9CAfGhOYuL915Oo-9pb
- hdu 5319 Painter
- 7.28多校1004——模拟——Painter
- HDU 5319 Painter(2015多校联合)
- 2015 Multi-University Training Contest 3