您的位置:首页 > 其它

算法和斐波那契数列

2013-12-02 11:09 141 查看
---------------------- <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>、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: