兔子

牛客网-2019校招真题-跳格子游戏(斐波那契数列)

百般思念 提交于 2020-01-14 23:37:13
斐波那契数列的数学问题 一、兔子数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子? 分析过程来自百度百科 二、排列组合 1.有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法? 2.跳格子:一列纵格共有n格,跳完到达终点,每次可以跳1或两格,输入格子数n,输出跳完n个格子到达终点的方法种数。 来源: https://www.cnblogs.com/yuanyuanhi/p/12194318.html

数据结构之递归案例一

孤者浪人 提交于 2020-01-09 00:49:20
什么是递归? 顾名思义,所谓递归就是一个函数(或方法)自己调用自己,最简的如下: public void text() { text(); } 就是这么简单,但是一定要给这个递归函数一个出口,不然就会无限循环下去,最后的结果就是OutOfMemory(内存溢出),如果是在main函数中调用的话,就会出现栈空间已满的错误。 如何给一个递归的方法写一个出口呢? 只要在递归的过程中,有一个方法有一条return 语句,也就是有一个递归方法不再进行递归就会退出了。 我们给上方法添加一个返回的条件; private int count = 0; /* * 每次让count累加,当它等于4时,就返回,这样就能这个递归函数了 */ public void text() { if (count == 4) { return; } count++; text(); } 递归有什么用? 1.最著名的就是裴波那契数列 有如下问题:假设第一个月有一对刚出生的兔子,第二个月兔子进入成熟期,我三个月开始生育小兔子,而一对成熟的兔子会在每月生育一对小兔子,兔子永远不会死去。。。n月后会有多少只兔子 可以很容易地使用穷举来计算刚开始的几个月的兔子数 月份 1 2 3 4 5 6 7 兔子对数 1 1 2 3 5 8 13 使用递归来解决这个问题的思路分析: 很容易得到一个算式就是: 当n=0时,有0对兔子; 当n

兔子搬萝卜  猴子搬香蕉  算法实现

懵懂的女人 提交于 2020-01-08 01:58:25
一只小兔子有100根胡萝卜, 它要走50米才能到家, 每次它最多搬50根胡萝卜, 而每走1米就要吃掉1根胡萝卜, 请问它最多能把多少根胡萝卜搬到家里? 如果有125根胡萝卜?200根胡萝卜?如果负重100?距离80? 100根胡萝卜可以通过列方程的方式解决 通过题意可分析出:一共搬运两次,每次搬运50个 设第一次搬运至x,进行折返 x位置放置(50-2x)萝卜 第二次搬运至x位置,身上还剩(50-x)萝卜 1.(50-2x) + (50-x) <= 50 即地上的加身上的萝卜,兔子可以一次搬走 x>=50/3 仍需消耗(50-x)可到达终点 最终剩余萝卜数量(50-2x) x取17时,剩余萝卜最多,数量为16 2.(50-2x) + (50-x) > 50 即地上和身上的萝卜超过50,兔子只能搬运走50个 x < 50/3 仍需消耗(50-x)可到达终点 最终剩余萝卜数量(x) x取16时,剩余萝卜最多,数量为16 (这种模式下,16米的那个地上还剩了2个胡萝卜) 答:兔子第一次将萝卜搬运至16或17米时进行折返,剩余萝卜数量最多,最大数量为16个。 代码版: 代码来自: https://blog.csdn.net/ggyhang/article/details/89177214 (改了下命名、加了点注释,) 算法一 每次把所有的萝卜搬运到下一米, int rabit_eat

狐狸吃兔子问题(约瑟环)————穷且益坚,不坠青云之志。

前提是你 提交于 2020-01-06 17:02:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 围绕着山顶有10个圆形排列的洞,狐狸要吃兔子, 兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。 你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找, 再隔3个…以后在这个圆圈中如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。 问:兔子可能在哪个洞里?、 #include<stdio.h> int main(int argc, const char *argv[]) { //利用标记法,找过的洞标记1,没有找过的就是初始化的值。 int a[10]={0};//代表是10个洞府并将其初始化为0. int i;//循环变量。 int j=0;//表示狼从第一个洞府开始找。 //j:0 2 5 9 14 //2 3 4 5 => i+2。 //1000次循环可以采用%运算。 for(i=0;i<10000;i++) { a[j]=1;//表示找过的洞府。 j=(j+2+i)%10;//要找的下一个洞府。 } //遍历 for(i=0;i<10;i++) if(!a[i])//等价if(a[i]==0)。 printf("兔子可能藏在%d号洞\n",i+1);//数组下表0对应的是洞府的1号。 return 0; } 来源: oschina 链接:

7-22 龟兔赛跑 (20分)

不羁岁月 提交于 2020-01-04 15:49:04
7-22 龟兔赛跑 (20分) 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出@ @,兔子赢输出 _ ,平局则输出- -;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 参考代码 #include < stdio . h > int main ( ) { int w , t , time ; scanf ( "%d" , & time ) ; int ti = 0 , tmp = 0 , cnt = 0 ; while ( ti <= time ) { if ( tmp == 10 && w < t ) { tmp = 0 ; if ( ti + 30 <= time ) { cnt += 30 ; ti += 30 ; } else { cnt += ( time - ti ) ; ti += ( time - ti ) ; } } if

龟兔赛跑问题

六眼飞鱼酱① 提交于 2020-01-03 08:51:30
题目 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出 @_@ ,兔子赢输出 ^_^ ,平局则输出 -_- ;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726思路:反复思考了很长时间,虽然一开始的思路很清晰,但是一开始感到无从下手,在不断的完善中,终于完全写正确了。写完后看了网上其他人的算法,感叹每个人的思考方式都各具特色,可能我的是比较笨拙的方法吧,仅供大家参考。 分析发现,其实时间t只在最初的十分钟内,逐次递增,以后都是十分钟或者30分钟的增加,且10分钟之后t总是整数。这就带来判断的一个问题,当输入的T为非整数时,怎样进行判断。T为非整数,可分为两种情况:第一,它以休息结束。第二,它以龟兔跑步中结束。这需要加入判别变量进行判断。而且需要注意的是,时间小于10分钟与不小于10分钟面临的情况十不同的。(一开始省略的这个判断,很苦恼为什么一直不对

新龟兔赛跑

允我心安 提交于 2020-01-03 08:51:03
Description 大家还记得龟兔赛跑的故事吗?兔子输给了乌龟,但是他一直都不服气,想要一雪前耻。他把他的族人全部都带来了海边,要与乌龟一族一比高下。嚣张的兔子们,给了乌龟一个月的时间来准备这场”世纪大战 ” 。如临大敌的乌龟们每天没日没夜的锻炼,在高帅富Bearboy的帮助下,乌龟的速度再也不是以前那样了,完全有能力和兔子抗衡。为了比赛的结果更权威,这次兔子提出,要N只兔子和N只乌龟在同一条跑道上同时进行比赛。 嚣张的兔子让乌龟们自己在跑道上选择自己起跑的起点(不一定是跑道的0点),同时让乌龟为这N只兔子规定他们的起点。跑道长度保证所有的超越都可以完成,比赛积分计算如下: 1:x只乌龟同时超过一只兔子 乌龟一族 加x 分 2:x只兔子同时超过一只乌龟 兔子一族 加x分 3:x只乌龟同时超过y只兔子 乌龟一族 加x*y分 4:x只兔子同时超过y只乌龟 兔子一族 加x*y分 问最后谁的分最高。 Input 输入有多组测试数据。每组测试数据第一行是一个整数N(1<=N<=100000),表示兔子和乌龟的数量(都为N)。接下来有2*N行数据,每行有两个数字Si , Vi(Si表示第i只乌龟/兔子的初始位置(跑道起点为0),Vi(1<=Vi<=100000)表示第i只乌龟/兔子的匀速前行的速度)第2行到N+1行是N只兔子的信息,第N+2行到2*N+1行是N只乌龟的信息。

java多线程模拟龟兔赛跑

删除回忆录丶 提交于 2019-12-23 17:40:42
让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快. 1 public class Racer implements Runnable{ 2 private static String winner;//胜利者 3 4 @Override 5 public void run() { 6 //赛道 7 for (int step = 1; step <= 100; step++) { 8 /* if(Thread.currentThread().getName().equals("兔子")&&step%50==0){ 9 try { 10 Thread.sleep(200); 11 } catch (InterruptedException e) { 12 e.printStackTrace(); 13 } 14 }*/ 15 System.out.println(Thread.currentThread().getName()+"---->走了"+step+"步"); 16 17 boolean flag= GameOver(step); 18 if(flag){ 19 break; 20 } 21 22 } 23 } 24 25 private boolean GameOver(int step) { 26 if(winner!=null){ 27 return true;

兔死狗烹新解

萝らか妹 提交于 2019-12-21 09:34:35
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 昨天晚上给家里小孩讲兔死狗烹的成语,兔死狗烹的意思是,兔子死光了狗就会被杀掉吃了,正准备给他讲这个成语的寓意的时候,小孩问我,为什么兔子死了就要把狗杀了呢? 我对小孩说,因为兔子死光了,狗就没用了,所以就要被杀了。 那狗还会看家呀,它可以当个看家狗,小孩又问。 嗯 .... , 我想了一会,只好说,这只狗呢,只会抓兔子,不会看家。 那它怎么不去学习看家呢?小孩继续问。 因为它太懒了平时不好好学习,所以呢,到兔子死光了,他都没有学会怎么看家。因此他的主人嫌弃它光吃饭不干活,就不要它了。 我解释道。 所以这个成语告诉我们,一定要好好学习,不然就会被社会淘汰掉 , 我抓住机会,教育小孩学习的重要性。 小孩若有所思的点点头。 而我不由得想起大厂清退大龄员工的新闻。一方面大厂不地道,另一方面站在自己的角度想一想,除了抓兔子的技能外,你还能干什么?多久没学习了? 兔死狗烹,兔死狗烹。 其实每个职场上的人,都是那条狗。一旦不能为公司创造价值就会被公司抛弃。所以在做本职工作的时候也要花时间学习本职工作之外的技能。这也是我不提倡996的原因。 其实,不光职场上的人是兔死狗烹中的狗,公司也是,一旦公司不能给客户创造价值,就会被客户抛弃。 来源: oschina 链接: https://my.oschina.net/u/587323

龟兔赛跑 (20分)

…衆ロ難τιáo~ 提交于 2019-12-21 05:43:12
龟兔赛跑 (20分) 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快? 输入格式: 输入在一行中给出比赛时间T(分钟)。 输出格式: 在一行中输出比赛的结果:乌龟赢输出@ @,兔子赢输出 _ ,平局则输出- -;后跟1空格,再输出胜利者跑完的距离。 输入样例: 242 输出样例: @_@ 726 代码: # include <stdio.h> int main ( ) { int t , a = 0 , b = 0 , i ; scanf ( "%d" , & t ) ; for ( i = 1 ; i <= t ; i ++ ) { a = a + 3 ; b = b + 9 ; if ( i % 10 == 0 ) { if ( b > a ) { for ( int j = 0 ; j < 30 ; j ++ ) { a = a + 3 ; i = i + 1 ; if ( i == t ) break ; } } } } if ( a > b ) printf ( "@