Problem 1049 - 斐波那契数

Description

       斐波那契数列是如下的一个数列,0,1,1,2,3,5……,其通项公式为F(n)=F(n-1)+F(n-2),(n>=2) ,其中F(0)=0,F(1)=1,你的任务很简单,判定斐波契数列的第K项是否为偶数,如果是输出YES,否则输出NO

Input

第一行,T,表示有T个测试样例。
接下来T行,每行一个数据K(0<=K<=10^10000),表示要判定的是哪一项。

Output

如果第K项是偶数,输出YES,否则输出NO。

Sample Input

2
0
1

Sample Output

YES
NO

Hint

64-bit interger is not enough for 10^10000

Source

FZ

分析:该题目关键在于大数的存储,可以采用字符数组存储整数,然后可观察T(n)序列从0开始实际上是一个以3为周期的 “偶奇奇”的重复序列。
T(0) = 0 = YES
T(1) = 1 = NO
T(2) = 1 = NO
T(3) = 2 = YES
T(4) = 3 = NO
T(5) = 5 = NO
T(6) = 8 = YES
……

可见,当n为3的倍数(包括0倍)时,则T(n)偶数,否则是奇数。
这就需要用到一个小技巧了:任何10进制数,如果各位数字的和能被3整除,则该数整体能被三整出,例如,
12 => 1+2=3,3能被3整除,所以12能被3整除
1293 => 1+2+9+3 = 15,15能被3整除,所以1293能被3整除

C代码:

#include<stdio.h>
#include<string.h>
int a,b,c,d,e,sum;
char s[10005];

int main()
{
    int t;
    scanf("%d",&t);
    while (t--)
    {
          sum=0;
          scanf("%s",&s);
          d=strlen(s);
          for (a=0;a<d;a++) sum=sum+(s[a]-'0');
          if (sum%3==0) printf("YES\n"); else printf("NO\n");
    }
}
#include<stdio.h>
#include<string.h>
char s[10010];
int main()
{
    int n,i,sum,len;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            sum=0;
            scanf("%s",s);
            len=strlen(s);
            for(i=0;i<len;i++)
                sum+=s[i]-'0';
            if(sum%3==0) printf("YES\n");
            else printf("NO\n");
        }
    }
    return 0;
}

C++代码:

#include <string>
using namespace std;

bool IsEvent(string bigInt)
{
    int sum = 0;
    for (size_t i=0; i<bigInt.size(); ++i)
    {
        sum += (bigInt[i] - '0');
    }

    return (sum % 3)==0;
}

#include <iostream>
int main()
{
	int n;
	string bigInt;
	cin>>n;
	for (int i=0; i<n; ++i)
	{
		cin>>bigInt;
		cout<<(IsEvent(bigInt) ? "YES" : "NO")<<endl;
	}
	return 0;
}
时间: 2024-09-16 02:24:22

Problem 1049 - 斐波那契数的相关文章

UVa 10183 How Many Fibs? (统计斐波那契数个数&amp;amp;高精度)

10183 - How Many Fibs? Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1124 Recall the definition of the Fibonacci numbers:    f1 := 1    f2 := 2    fn :

求助-斐波那契数运算时间?

问题描述 斐波那契数运算时间? WINDOWS 64位系统下.用递归运算,算斐波那契数列.第一第二项分别是0,1.算2013大概需要多久. 解决方案 楼主 你自己把算法实现 然后测试一下就好 每台机器的时间不一样的

求大神指教逻辑式程序是什么,能具体给出个例子吗?比方说写出求斐波那契数的逻辑式程序

问题描述 求大神指教逻辑式程序是什么,能具体给出个例子吗?比方说写出求斐波那契数的逻辑式程序 求大神指教逻辑式程序是什么,能具体给出个例子吗?比方说写出求斐波那契数的逻辑式程序 解决方案 斐波那契数列和阶乘的实现. fib(1,1). fib(2,1). fib(N,Ret) :- N > 2, N1 is N -1, N2 is N -2, fib(N1,Prv1), fib(N2,Prv2), Ret is Prv2 + Prv1. factorial(0,1). factorial(1,1

斐波那契数(C/C++,Scheme)

一.背景 斐波那契数的定义: f0=0 f1=1 fi=fi−1+fi−2(i>1) 二.代码 C++语言版 int fib_iter(int a, int b, int count) { if (count == 0) return b; else return fib_iter(a + b, a, count - 1); } int fib(int n) { return fib_iter(1, 0, n); } Common Lisp语言版 (defun fib (n) (fib-iter

C++求斐波那契数的实例代码_C 语言

题目内容:斐波那契数定义为:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n>1且n为整数) 如果写出菲氏数列,则应该是: 0 1 1 2 3 5 8 13 21 34 -- 如果求其第6项,则应为8. 求第n项菲氏数. 输入描述:输入数据含有不多于50个的正整数n(0<=n<=46). 输出描述:对于每个n,计算其第n项菲氏数,每个结果应单独占一行. 题目分析:先把第0项到第46项的斐波那契数求出来,放在一个数组中,然后,直接查表即可,这样就不会超时. 参考代码:

HDOJ/HDU 5686 Problem B(斐波拉契+大数~)

Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列. Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度. 1≤N≤200 Output 对于每组测试数据,输出一个整数,代表由题目中所给定的全1序列所能形成的新序列的数量. Sample Input 1 3 5 Sample Output 1 3 8 Hin

使用模板元编程快速的得到斐波那契数。。

这是一种将运行时消耗转移到编译器消耗的方法,是c++模板的一种应用. 当你的程序运行时效率需要特别高的时候,可以考虑这样的方法. 模板实例化的时候需要常量: #include <iostream> using namespace std; template < unsigned N > struct Fib { enum { Val = Fib<N-1>::Val + Fib<N-2>::Val //递归.. }; }; template<> /

hdu 4549 M斐波那契数列

click here ~~ Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据: 每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output 对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n

UVa 10229 Modular Fibonacci:矩阵快速幂求斐波那契

10229 - Modular Fibonacci Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=115&page=show_problem&problem=1170 The Fibonacci numbers (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...) are defin