您的位置:首页 > 其它

BestCoder10 1001 Revenge of Fibonacci(hdu 5018) 解题报告

2014-09-19 22:20 507 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5018





题目意思:给出在 new Fibonacci 中最先的两个数 A 和 B(也就是f[1] = A, f[2] = B),通过这条式子f
= f[n-1] + f[n-2],问 C 是否在这条 new Fibonacci sequence 内。(1 <= A, B, C <= 1 000 000 000)

首先,要想到 C 有可能是 A 或者 B,这种情况也是属于在这个序列范围内的。

还有一个地方,不要固定死数组的长度,因为不确定到底需要多大的空间存下来,而且,确实比较浪费空间,当前需要求出一个新的数,其实就是需要前面的两个数而已,再前面的根本就没什么用。

于是我这里就用到滚动数组的思想,只开了长度为 4 的数组,不断迭代来判断在 1000 000 000 的范围内,能否得到 C 这个数。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;

const int INF = 1e9;
__int64 A, B, C;
__int64 f[4];

int main()
{
int T, i;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
scanf("%I64d%I64d%I64d", &A, &B, &C);
f[0] = 0;
f[1] = A;
f[2] = B;
if (C == A || C == B)
printf("Yes\n");
else
{
bool flag = 0;
for (i = 3; ; i++)
{
f[0] = f[1];
f[1] = f[2];
f[2] = f[0] + f[1];
if (f[2] == C)
{
flag = 1;
break;
}
if (f[2] >= INF)
break;
}
printf("%s\n", flag ? "Yes" : "No");
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: