狐狸找兔子(java 版)
围绕着山顶有10个洞,一只狐狸和一只兔子住在各自的洞里。狐狸想吃掉兔子。
一天,兔子对狐狸说:“你想吃我有一个条件,先把洞从1-10编上号,你从10号洞出发,
先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依次类推,次数不限,若能找到我,
你就可以饱餐一顿。不过在没有找到我以前不能停下来。” 狐狸满口答应,就开始找了。它从早到晚进了1000次洞,
累得昏了过去,也没找到兔子,请问,兔子躲在几号洞里?
1、伪代码
// 数组实现
算法 FindRabbit(num, holeNum)
// 输入 num 为 fox 找的次数, holeNum为洞的个数
// 输出 没被访问hole
for i ← 1 to holeNumdo
hole[i]= 1
for i ← 1 and j = 0 to num do
j← j + i
ifj > 10
j← j %10
printj
hole[j] = 1 // 把访问过的洞置为一
for i ← 1 to holeNumdo
ifhole[i] = 0
printi
// 递归实现
算法 FindRabbit(num)
// 输出 fox 已经找过的洞
// 输入 fox 找的次数
if num = 1return 1 // fox 第一次找的是第一个洞
else
first ← find(num - 1) + num;
if first > 10
print first%10
return first;
2、效率分析
// 数组实现效率分析
该算法有三个for 循环,基本操作为赋值
C(n, m)=2 + = 2m + n O(m + n)
// 递归实现效率分析
通过分析 可以发现 递归式F(n) =F(n-1) + n 基本操作为赋值
而次数函数 为 C(n) = C(n-1) +1 C(1) = 1
可知 C(n) = n O(n)
3、源代码
/**
* 狐狸找兔子
* @author chen
*/
public class Josephus {
public static void main(String[] args) {
int num = 1000;
int holeNum = 11;
// 数组 实现
findRabbit(num, holeNum);
// 递归实现
find(num);
}
/**
* 数组实现
* @param num
* @param holeNum
*/
public static void findRabbit(int num, int holeNum) {
int hole[] = new int[holeNum];
// 表示没被访问过
for (int i = 1; i < holeNum; i++) {
hole[i] = 0;
}
for (int i = 1, j = 0; i <= num; i++) {
j = j + i;
if (j > 10) {
j = j % 10;
}
System.out.println("第 " + i + " 次 , 找到 洞 " + j);
hole[j] = 1;
}
// 表示没被访问过
for (int i = 1; i < holeNum; i++) {
if (hole[i] == 0) {
System.out.println(i);
}
}
}
/**
* 减一法实现
* @param num
* @return
*/
public static int find(int num){
if(num == 1){
System.out.println("第 1 次 , 找到 洞 1");
return 1;
}else {
int first = find(num - 1) + num;
int hole = first;
if (hole > 10) {
hole = hole % 10;
}
System.out.println("第 " + num + " 次 , 找到 洞 " + hole);
return first;
}
}
}
狐狸找兔子(java 版)相关推荐
- java写 狐狸找兔子_狐狸找兔子(java 版)
围绕着山顶有10个洞,一只狐狸和一只兔子住在各自的洞里.狐狸想吃掉兔子.一天,兔子对狐狸说:"你想吃我有一个条件,先把洞从1-10编上号,你从10号洞出发,先到1号洞找我:第二次隔1个洞找我 ...
- C语言中狐狸找兔子的问题
狐狸找兔子的问题 围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个 ...
- C++经典问题:狐狸找兔子
问题描述: 围绕着山顶有10个洞,一只狐狸和一只兔子住在各自的洞里.狐狸想吃掉兔子.一天,兔子对狐狸说:"你想吃我有一个条件,先把洞从1-10编上号,你从10号洞出发,先到1号洞找我:第二次 ...
- java写 狐狸找兔子_狐狸找兔 算法分析
题目: 围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第 ...
- 狐狸与兔子 java,兔子夫妇和狐狸夫妇的爱情
兔子太太今天不开心,即使回到家见到亲爱的兔子先生依然不开心. 兔子先生今天很高兴,兴致勃勃的想告诉太太他升职了每个礼拜可以多挣一筐胡萝卜. 可是他亲爱的兔子太太不开心,他很惊慌是不是他做错了什么. 于 ...
- 力扣860题 柠檬水找零 Java版
class Solution {public boolean lemonadeChange(int[] bills) {// 五元张数int five = 0;// 十元张数int ten = 0;f ...
- C语言狐狸与兔子编程,狐狸找兔子(VB程序设计)
满意答案 唯一手记 2013.08.17 采纳率:57% 等级:12 已帮助:2085人 楼主 这时一段根据题目出的查找程序,但是有一定的问题 mumber = 0 这句应该说number=0还 ...
- 【经典算法】:狐狸抓兔子问题
前言 问题见百度 狐狸抓兔子问题 代码 全在注释里面了,没啥好说的 // 狐狸找兔子问题 // author:seen // time:2015-09-20#include <iostream& ...
- java版溺尸掉三叉戟吗_我的世界:得不到溺尸的三叉戟怎么办?概率太低,版本要求不同!...
在沙盒游戏我的世界中,三叉戟是海洋版本所添加的一个装备,可附魔,使其成为近战和远攻"两用"武器.可惜的是玩家们想要得到溺尸手中的三叉戟居然这么困难,有的玩家辛辛苦苦地击杀一两百个溺 ...
- java版溺尸掉三叉戟吗_我的世界:拿个装备也要看概率?想要溺尸的三叉戟居然这么困难!...
虽然玩家们遇到普通类型的溺尸不用害怕,但是看见拿着三叉戟的溺尸就要当心了,它们携带的三叉戟有一定的概率带有魔咒,关键是溺尸拥有无限的三叉戟可供它们投掷,接二连三地扔出三叉戟攻击玩家们,有一种背脊发凉的 ...
最新文章
- Redis入门到精通-Redis高级命令
- java 如何把源码导出为jar包,以及如何使用导出的jar包
- 大侠稍等!URL 中为何出现奇怪的字符
- xtrabackup部分备份数据库 Partial Backups
- centos7下安装nginx及常用命令
- XBMC Skinning Manual
- 自适应各终端懒人泽客导航源码v2.6 无后门
- 整洁代码--写好注释
- 物质环境、符号还是认知模型?——谈韩礼德、马丁、范迪克的语境观
- 在PS中,1PX等于多少毫米?
- 一文教你如何在Linux系统上搭建samba文件共享服务器
- 分享| 三款在线临时文件分享工具,无需注册
- c语言自定义函写计算器,C语言实现计算器功能
- JIRA实践基础(1):JIRA-Software安装与设定
- jaeger 是很么软件_开源分布式跟踪系统Jaeger介绍 (六步快速上手)
- Java面试宝典(2021版)
- hcaptcha 我是人类验证码怎么跳过怎么验证自动识别
- 2023养老展,中福协养老展,中国国际养老服务业博览会
- android混淆简单教程
- 汉字对应的ASCLL