算法和斐波那契数列

原创 2013年12月02日 11:09:55

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

           此两例考察是的是算法。从第一个例子来看,从1开始报数,报到14的这个人就要退出。那么每次退出的人都是偶数,然后其他人重新开始,从1报数,到14退出。那么我们可以想象一下退出的一次为:14、28、42等。

思路:首先,定义一个数组  

            其次,给函数赋值,并传参,再调用     

           判断这个人的唯一性。

package com.itheima;

import java.util.Arrays;

public class Test10 {
/**
* 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,
* 从1报数,到14退出。问:最后剩下的是100人中的第几个人?
* @param args
*/
public static int count=0;//出局的人
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum=100;
int exit=14;
sumExit(sum,exit);//调用判断方法
}

public static void sumExit(int sum,int exit)
{
int[] arr=new int[sum];//创建数组长度为sum
for(int i=0;i<sum;i++)//双重循环
{
for(int j=0;j<exit;j++)
{
count++;//每数一个人,自增
if (j>0)
have(i,arr);//调用是否存在的方法
if(count>sum)
{
count=1;//重新赋值,因为count大于总人数
have(i,arr);
}
}
arr[i]=count;//退出的人
}
System.out.println("退出的顺序为:"+Arrays.toString(arr));
System.out.println("最后剩下的人为:"+arr[sum-1]);
}
public static void have(int n,int[] arr)
{
for(int x=0;x<n;x++){
for(int y=0;y<n;y++)
{
if (count==arr[y])
count++;//判断是否唯一,存在就加一
}

}
}

}


package com.itheima;


import java.util.Scanner;

求斐波那契数列

斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
这个数列从第三项开始,每一项都等于前两项之和。


public class Test3 {


/**
* 3、求斐波那契数列第n项,n<30斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
* @param args
*/
//本题采用递归的方法,求出第N项的值
public static void main(String[] args) {
// TODO Auto-generated method stub

int n;
for (int i=1;i<=10;i++)
{
n=PBN(i);//采用递归
System.out.print(n+"-");//输出前十项
}
System.out.print("请输入N:");
Scanner in=new Scanner(System.in);//输入你想获得那一项的值
n=in.nextInt();
System.out.print("值为:"+PBN(n));
}
public static int PBN(int x)
{
if(x<=1)
return x;//如果值为1,则返回1
else
return PBN(x-1)+PBN(x-2);
}


}

兔子数列:兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?

我们不妨拿新出生的一对小兔子分析一下:
第一个月小兔子没有繁殖能力,所以还是一对
两个月后,生下一对小兔对数共有两对
三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对
------
依次类推可以列出下表:
经过月数
0
1
2
3
4
5
6
7
8
9
10
11
12
幼仔对数
1
0
1
1
2
3
5
8
13
21
34
55
89
成兔对数
0
1
1
2
3
5
8
13
21
34
55
89
144
总体对数
1
1
2
3
5
8
13
21
34
55
89
144
233
幼仔对数=前月成兔对数
成兔对数=前月成兔对数+前月幼仔对数
总体对数=本月成兔对数+本月幼仔对数
可以看出幼仔对数、成兔对数、总体对数都构成了一个数列。这个数列有关十分明显的特点,那是:前面相邻两项之和,构成了后一项。
除了具有a(n+2)=an+a(n+1)的性质外,还可以证明通项公式为:an=(1/√5)*{[(1+√5)/2]^n-[(1-√5)/2]^n}(n=1,2,3.....)



---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------


















相关文章推荐

走台阶问题运用递推和斐波那契数列C/C++源码实现

/* 题目:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少种跳法。 */ #include #include using namespace std; //计算...

时间空间复杂度(二分查找和斐波那契数列)

时间复杂度 空间复杂度 折半查找 斐波那契数列 递归法

递归算法算斐波那契数列

  • 2008年11月01日 21:28
  • 297B
  • 下载

斐波那契数列取模(大数)分治算法

斐波那契数列取模(大数)分治算法 这是算法课程上完分之策略后老师留的一道题目: 菲波那契数列如下:1,1,2,3,5,8,13,21,34......其中a[1] = 1, a[2] = 1,...

关于斐波那契数列的复杂度最低算法

Description   zyf总是有很多奇异的想法,他最近常常幻想着以后能开这么一个工厂,可以把前三天里生产出来的东西拿到今天来拼在一起作为今天生产的东西。假如前三天生产出来的产品数分别是x...
  • zwfars
  • zwfars
  • 2013年06月07日 00:30
  • 571

【转】斐波那契数列算法分析

【转】斐波那契数列算法分析 背景: 假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去...

青蛙跳台阶问题,常见面试算法题,斐波那契数列(Fibonacci Sequence)

一、一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。问题分析 设f(n)表示青蛙跳上n级台阶的跳法数。当只有一个台阶时, 即n = 1时, 只有1...

【刷题算法】斐波那契数列的应用

斐波那契以兔子繁殖为切入,提出一个古典问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 其数列是0...

算法:斐波那契数列

斐波那契数列php实现
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法和斐波那契数列
举报原因:
原因补充:

(最多只允许输入30个字)