算法和斐波那契数列

原创 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; //计算...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

Java多重循环算法问题:(九九乘法表、打印平行四边形、打印空心菱形、打印菱形、搬砖问题、斐波那契数列、猴子吃桃问题、回文数、1!+2!+...+20!)

package jereh1; import java.util.Scanner; public class Class4XunHuan { public static void main(St...

斐波那契数列的各种算法实现

斐波那契数列,但凡学过编程的童鞋们应该都懂,背景就不介绍了(就是大兔子生小兔子的故事),无论是面试还是实际的运用,常见的一个思路就是先用最先基本的办法实现,然后根据实际要求,一步步改进,优化算法效率。...

算法随练(斐波那契数列)

斐波那切数列斐波那契数列是最经典的递归算法的体现,最常见的就是兔子问题: 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数...

0009算法笔记——【动态规划】动态规划与斐波那契数列问题,最短路径问题

1、动态规划算法:        动态规划:通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。            ...

算法与数据结构 - 斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一...

Java基础算法——斐波那契数列的多种实现方式!

为什么突然想写这个,只因读了下边某位大佬的一段话! 如果你应聘的是“Web前端开发”岗位,那么你只懂jQuery也可以胜任,那么,“软件工程师”是不是就意味着会HTML、JavaScript和CS...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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