西北工业大学oj题-兔子生崽

2024-09-04 16:28

本文主要是介绍西北工业大学oj题-兔子生崽,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述:

兔子生崽问题。假设一对小兔的成熟期是一个月,即一个月可长成成兔,每对成兔每个月可以生一对小兔,一对新生的小兔从第二个月起就开始生兔子,试问从一对兔子开始繁殖,一年以后可有多少对兔子?

这道题目一眼看过去就是典型的递归问题,代码如下

public class RabbitReproduction {public static void main(String[] args) {int months = 12;System.out.println("After " + months + " months, there will be " + rabbitPairs(months) + " pairs of rabbits.");}public static int rabbitPairs(int n) {if (n == 1 || n == 2) {return 1;}return rabbitPairs(n - 1) + rabbitPairs(n - 2);}
}

递归方法:rabbitPairs 使用递归来计算每个月的兔子对数。这个问题类似于斐波那契数列:
第一个月和第二个月有 1 对兔子。
从第三个月开始,每个月的兔子对数等于前两个月的兔子对数之和。

但是这道题目虽然简单,但是递归方法可能会导致性能问题。

public class RabbitReproduction {public static void main(String[] args) {int months = 12;System.out.println("After " + months + " months, there will be " + rabbitPairs(months) + " pairs of rabbits.");}public static int rabbitPairs(int n) {if (n == 1 || n == 2) {return 1;}int[] dp = new int[n + 1];dp[1] = 1;dp[2] = 1;for (int i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
}
  • 数组 dp:用于存储每个月的兔子对数。
  • 初始条件dp[1] 和 dp[2] 都设为 1,因为第一个月和第二个月只有一对兔子。
  • 状态转移方程dp[i] = dp[i - 1] + dp[i - 2]。这表示每个月的兔子对数等于前一个月和前两个月兔子对数之和。
  • 循环:从第三个月开始逐月计算,直至第 n 个月

这种方法主要是避免了递归带来的性能问题,效率更高。

这篇关于西北工业大学oj题-兔子生崽的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136432

相关文章

哈理工OJ 2179(深搜)

组合 Time Limit: 1000 MSMemory Limit: 32768 K Total Submit: 7(5 users)Total Accepted: 6(5 users)Rating: Special Judge: No Description 给出一个正整数N,从集合{1,2,3..N} 中找出所有大小为k的子集, 并按照字典序从小到大输出。 Input 第一行是一个整

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

兔子--Notification的使用

<span style="font-size:18px;color:#ff0000;"></span> <span style="font-size:18px;color:#ff0000;">使用步骤:</span><p><span style="font-size:18px;color:#ff0000;">1 获取通知管理器NotificationManager,它也是一个系统服务</sp

兔子--PendingIntent与Intent的区别

pendingIntent是一种特殊的Intent。 主要的区别在于Intent的执行立刻的,而pendingIntent的执行不是立刻的。 pendingIntent执行的操作实质上是参数传进来的Intent的操作, 但是使用pendingIntent的目的在于它所包含的Intent的操作的执行是需要满足某些条件的。 主要的使用的地方和例子:通知Notificatio

兔子--The method setLatestEventInfo(Context, CharSequence, CharSequence, PendingIntent) from the type

notification.setLatestEventInfo(context, title, message, pendingIntent);     不建议使用 低于API Level 11版本,也就是Android 2.3.3以下的系统中,setLatestEventInfo()函数是唯一的实现方法。  Intent  intent = new Intent(

兔子--背景透明度设置

背景透明度设置:ee是透明度 android:background="#ee6c6c6c"

兔子--Android Support v4,Android Support v7,Android Support v13

Android Support Library package用于高版本的特性的向下兼容。 (fragement,ViewPager) Android Support v4:  这个包是为了照顾1.6及更高版本而设计的,这个包是使用最广泛的,eclipse新建工程时,都默认 带有了。 Android Support v7:  这个包是为了考虑照顾2.1及以上版本而设计的,

兔子--Android Support v4包丢失的解决办法

在开发中,Android Support v4包丢失的解决办法: Project->properties->Java Build Path->Libraries->Add External Jars 中加入sdk目录下的extras/android/support/v4/android-support-v4.jar (如果找不到,则需要用sdk manager下载andro

兔子--SDK,ADT,AVD,IDE,ADB

a:SDK(Software Development Kit):开发android应用所需要的开发工具的集合,包括库文件及工具。 b:ADT(Android Developer Tools):在Eclipse下开发工具的升级下载工具。adt只是一个eclipse的插件,里面可以设置 sdk路径. c:IDE:集成开发环境。IDE通常包括编程语言编辑器、自动建立工具、通常还包括调试

兔子--eclipse下载插件

eclipse菜单栏->help->adout ADT->Installation Details->找到要卸载的插件->选中->点击下方uninstall