Java算法之“兔子问题”
package wulj; /**
* Java算法之“兔子问题”:
* 有一只兔子,从出生后第3个月起每个月都生只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
* @Description
* @author wulj
* @date 2018年6月1日
*/
public class WljTest {
/**
* 转化为数学问题如下:
* 1.假设第一个月的兔子数为:a,第二个月的兔子数为:b
* 2.假设第一个月的新兔子数为 :new,老兔子数为:old 即:a=new + old;,则 第二个月b= new + 2*old;
* 到了第三个月的时候,则第二个月的 new存储的已经是老兔子,新兔子实际是old产生的,所以第三个月的秃子数量为:c= 2*(new + old) + old
* 3.化简后发现 a=new + old
* b= new + 2*old
* c= 2*new + 3*old
* 即:c= a + b;
* 因此转换为代码实现如函数:rabbitProblem()
*/
public static void rabbitProblem(){
int sum_rubbit;//每月的兔子总数
int pre_pre_rubbit = 1;//前两个月的兔子数
int pre_rubbit = 1;//前一个月的兔子数
for (int i = 3; i <= 12; i++) {
sum_rubbit = pre_pre_rubbit + pre_rubbit;
pre_pre_rubbit = pre_rubbit;
pre_rubbit = sum_rubbit;
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
}
}
public static int rabbitProblem_digui(int month){
int sum=0;
if(month == 1 || month == 2){
return 1;
}else{
sum = rabbitProblem_digui(month-1)+rabbitProblem_digui(month-2);
return sum;
} } /**
* 另外一种思路--转化为数学问题如下:
* 1.假设第一个月的兔子数为:a,第二个月的兔子数为:b
* 2.假设第一个月的新兔子数为 :new,老兔子数为:old 即:a=new + old;,则 第二个月b= new + 2*old;
* 到了第三个月的时候,则第二个月的 new存储的已经是老兔子,新兔子实际是old产生的,所以第三个月的秃子数量为:c= 2*(new + old) + old
* 通过上面的规律我们发现:
* 当月的new的数量和上个月的old数量是相等的,当月的old的数量是上个月的new与上个月的old的数量之和,当月的总数量是当月的new和当月的old的数量之和
* 因此转换为代码实现如函数:rabbitProblem_new()
*/
public static void rabbitProblem_new(){
int sum_rubbit = 0;//每月的兔子总数
int new_rubbit = 1;//前两个月的兔子数
int old_rubbit = 0;//前一个月的兔子数
int temp_new = 0;
//第一个月:
for (int i = 1; i <= 12; i++) {
sum_rubbit = new_rubbit + old_rubbit;
temp_new = old_rubbit;
old_rubbit = old_rubbit + new_rubbit;
new_rubbit = temp_new;
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
}
} /**
* 递归方法
* @param i
* @param new_rubbit
* @param old_rubbit
*/
public static void rabbitProblem_new_digui(int i, int new_rubbit,int old_rubbit){
int sum_rubbit = 0;//每月的兔子总数
int temp_new = 0;
sum_rubbit = new_rubbit + old_rubbit;
if(i == 12){
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
return;
}else{
temp_new = old_rubbit;
old_rubbit = old_rubbit + new_rubbit;
new_rubbit = temp_new;
rabbitProblem_new_digui(i+1,new_rubbit,old_rubbit);
}
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit); }
public static void main(String[] args) {
rabbitProblem_new_digui(1,1,0);
}
}
Java算法之“兔子问题”的更多相关文章
- JAVA算法系列 冒泡排序
java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...
- JAVA算法系列 快速排序
java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...
- java算法 蓝桥杯 乘法运算
问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...
- java算法 蓝桥杯 扶老奶奶街
一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- java算法 蓝桥杯 格子位置
问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...
- java算法----排序----(6)希尔排序(最小增量排序)
package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...
- java算法----排序----(5)归并排序
package log; import java.util.Arrays; public class Test4 { /** * java算法---归并排序 * * @param args */ pu ...
- java算法----排序----(4)快速排序
package log; public class Test4 { /** * java算法---快速排序 * * @param args */ public static void main(Str ...
随机推荐
- 点滴积累【C#】---序列化和反序列化
序列化和反序列化效果图: 序列化和反序列化代码: 需要添加两个命名空间: using System.IO; using System.Runtime.Serialization.Formatters. ...
- ubuntu:好用的help命令
以前光知道如何不清楚某个命令的用法可以打上后缀 ‘ --help' 现在刚发现,原来还有help命令来帮忙,如果你安装的是中文支持,在ubuntu上, 那么部分命令说明还是中文版哦. 举例: help ...
- 关于UI功能解锁,UI特效动画,UI tips的再思考
之前写过一篇这样的文章,但当时的思路可行性太低 首先所有的UI面板通过发送字符串消息来告知,是否触发了解锁检测,tips检测,动画特效.可以理解为这样的接口: AsyncResult SendUIMe ...
- Atitit.用户权限服务 登录退出功能
Atitit.用户权限服务 登录退出功能 参数说明 /com.attilax/user/loginOut.jsp?url="+url Utype=mer 作者:: ★(attilax)&g ...
- Missing iOS Distribution signing identity for …, 在打包的时候发现证书过期了。
今天早上 上班发现钥匙串中的全部证书 都 提示此证书签发者无效 Thanks for bringing this to the attention of the community and apolo ...
- C++语言基础(22)-转换构造函数和类型转换函数
一.转换构造函数 将其它类型转换为当前类类型需要借助转换构造函数(Conversion constructor).转换构造函数也是一种构造函数,它遵循构造函数的一般规则.转换构造函数只有一个参数. # ...
- 85. Insert Node in a Binary Search Tree【easy】
Given a binary search tree and a new tree node, insert the node into the tree. You should keep the t ...
- SpringBoot入门系列:第三篇 日志输出
http://blog.csdn.net/lxhjh/article/details/51752419
- 关于EasyUI的Layout总结
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.layout以html标签方式建立的 <div id="content" region="center&q ...
- 破解idea注册码
添加 “0.0.0.0 account.jetbrains.com”到host, hosts位置:C:\Windows\System32\drivers\etc 获取注册码网址: http://ide ...