新的斐波那契数列

Problem1: 

题目描述:

定义一个新的斐波那契数列:

F(0)=7;

F(1)=11;

F(n)=F(n-1)+F(n-2);(n>=2)

输入:

输入有多组;首先输入一个N(N<=100),代表要输入的测试用例的个数;接下来输入N个数字ni(ni<=100),数字间用空格隔开。

输出:

求F(n)能否被3整除,若能整除输出‘yes’,否则输出‘no’。

样例输入:

3 0 1 2

样例输出:

no

no

yes

提示:不能用递归,否则超时!在计算时,我们没必要算出递推的真正值,后面会越来越大,可能Int 都存不下了!题目只要求算是否是3的倍数,也就是说,不管值多大,最后都只是 3n+0,3n+1,3n+2 这三种情况,我们只需对3取余即可。

/*
 * 描述: 新的斐波那契数列
 * 作者: 张亚超
 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907
 * 日期: 2014/8/24
 */
#include<stdio.h>
#define N 105

int F[N]; // 记录递推数对3取余的余数
int I[N]; // 记录输入的n个值
bool mark[N]; //标记对应数是否是3的余数

int main(){

	F[0] = 7;
	F[1] = 11;
	for(int i = 0; i < N; i++) //标记初始化为false
		mark[i] = false;

	for(i = 2; i < N; i++){    //计算递推数对3取余的余数
		F[i] = F[i-1] + F[i-2];
		if(F[i] % 3 == 0)     //若为3的倍数,标记
			mark[i] = true;
		F[i] %= 3;            //重要一步,简化运算,只存对3的余数
	}

	int n;
	while(scanf("%d",&n) != EOF){
		for(int i = 0; i < n; i++){  //输入
			scanf("%d",&I[i]);
		}
		for( i = 0; i < n; i++){     //输出
			if(mark[I[i]])
				printf("yes\n");
			else
				printf("no\n");
		}
	}
	return 0;
}
时间: 2024-08-09 10:43:53

新的斐波那契数列的相关文章

斐波那契数列(分析别人的代码)

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和. n1 = 0 #给n1赋初始值 n2 = 1 #给n1赋初始值 count = 0 #给计数器初始值 while count < 10: #循环条件为计数器小于10 nth = n1 + n2 #n

斐波那契数列题型ACing

斐波那契数列 特点:头两项均为1,后面任一项都是其前两项之和. 程序在计算中需要用两个变量存储最近产生的两个序列值,且产生了新数据后,两个变量要更新. 问题1:输出斐波那契数列的前十项. int i,x1,x2,x; x1=1; //头两项都是1 x2=1; printf("%6d%6d",x1,x2); for(i=1;i<=8;i++){ //循环输出后8项 x=x1+x2; //计算新项 printf("%6d",x); x1=x2; //更新x1和x2

hdu-5686 Problem B(斐波那契数列)

题目链接: Problem B Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description 度熊面前有一个全是由1构成的字符串,被称为全1序列.你可以合并任意相邻的两个1,从而形成一个新的序列.对于给定的一个全1序列,请计算根据以上方法,可以构成多少种不同的序列. Input 这里包括多组测试数据,每组测试数据包含一个正整数N,代表全1序列的长度.

斐波那契数列和反向计算问题

反向计算:编写一个函数将一个整型转换为二进制形式 反向计算问题,递归比循环更简单 分析:需要理解,奇数的二进制最后一位是1,偶数的二进制最后一位一定是0,联想记忆,这个和整型的奇偶性是一致的,1本身就是奇数,0本身是偶数. 十进制整数转换为二进制整数采用"除2取余,逆序排列"法. 具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列

ACM2 斐波那契数列

描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就由之前的两数相加.首几个斐波那契数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,……………… 特别指出:0不是第一项,而是第

斐波那契数列——摘自搜狗百科

1数列公式 递推公式 斐波那契数列:0.1.1.2.3.5.8.13.21.34.55.89.144... 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式: F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3) 通项公式 通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为: X^2=X+1 解得 X1=(1+√5)/2, X2=(1-√5)/2. 斐波拉契数列则F(n)=C1*X1^n + C2*X2^n ∵F(1)=F(2

Java 兔子问题(斐波那契数列)扩展篇

Java兔子问题(斐波那契数列)扩展篇 斐波那契数列指的是这样一个数列 0, 1, 1, 2,3, 5, 8, 13, 21, 34, 55, 89, 144, ...对于这个数列仅仅能说将兔子生产周期第为3月.假设生成周期变成4月这个数列肯定不是这种,或者说兔子还有死亡周期,在这里我是对兔子生产周期没有限定.仅仅要月份大于生产周期都能够计算出第month月份究竟能产生多少对兔子. Java兔子生殖问题 斐波那契数列又因数学家列昂纳多·斐波那契以兔子生殖为样例而引入.故又称为"兔子数列"

数值算法:无约束优化之一维搜索方法之黄金分割法、斐波那契数列法

目标函数为一元单值函数f:R->R的最小化优化问题,一般不会单独遇到,它通常作为多维优化问题中的一个部分出现,例如梯度下降法中每次最优迭代步长的估计. 一维搜索方法是通过迭代方式求解的,这不同于我们人脑的直接通过解表达式求解方法.迭代算法是从初始搜索点x(0)出发,产生一个迭代序列x(1),x(2),....在第k=0,1,2,...次迭代中,通过当前迭代点x(k)和目标函数 f 构建下一个迭代点x(k+1).某些算法可能只需要用到迭代点处的目标函数值,而另一些算法还可能用到目标函数的导数 f'

【poj3070】矩阵乘法求斐波那契数列

[题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [分析] 这是我们熟悉的斐波那契数列,原来呢我们是递推求值的嘛,当然这是最水的想法~~可是!这里的n很大诶,有10^9,for一遍肯定是不可以的咯. 于是,我学会了用矩阵乘法求斐波那契数列(貌似是很经典的). 作为初学者的我觉得十分神奇!! 好,我们来看: 我们每次存两个数f[i-1]和f[i-2],