1、原题:

题目描述

小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃。最开始小易在一个初始位置x_0。对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7。因为使用神秘力量要耗费太多体力,所以它只能使用神秘力量最多100,000次。贝壳总生长在能被1,000,000,007整除的位置(比如:位置0,位置1,000,000,007,位置2,000,000,014等)。小易需要你帮忙计算最少需要使用多少次神秘力量就能吃到贝壳。

输入描述:

输入一个初始位置x_0,范围在1到1,000,000,006

输出描述:

输出小易最少需要使用神秘力量的次数,如果使用次数使用完还没找到贝壳,则输出-1
示例1

输入

125000000

输出

1

2、主要思想:

(1)BFS思想,这一点很容易想到。

(2)对于已经访问过的节点,要用一个set进行记录,这样减少非常的多的重复计算,而且未被访问的节点队列queue才不会超级长。这一点是本题要注意的地方,因为开始时候,自己就没有对已经访问过的点进行记录,导致程序一直通过率为40%。后来终于找到症结所在。

3、code实现:

package schooloffer17;import java.util.*;/*** Created by caoxiaohong on 17/11/8 15:20.* <饥饿的小易></>* 实质:bfs*/
public class HungriedXiaoYi {public static void main(String[] args) {Scanner scanner=new Scanner(System.in);long x;Set<Long> occur=new HashSet<Long>();Queue<Long> queue=new LinkedList<Long>();while (scanner.hasNextLong()){x=scanner.nextLong();//输入起始位置,可以行走的位置4 * x + 3或者8 * x + 7;int front=-1,rear=-1;int last=0,level=0;queue.add(x%1000000007);rear++;occur.add(x%1000000007);while (level<100001 && !queue.isEmpty()){long loc=queue.poll();front++;if(loc==0){//找到System.out.println(level);break;}else{if(!occur.contains((4 * loc + 3)%1000000007)) {queue.add((4 * loc + 3) % 1000000007);occur.add((4*loc+3)%1000000007);rear++;}if(!occur.contains((8 * loc + 7)%1000000007)){queue.add((8 * loc + 7)%1000000007);occur.add((8*loc+7)%1000000007);rear++;}}if(front==last){level++;last=rear;}}if(level==100001 || (level<=100000 && queue.isEmpty()))System.out.println(-1);queue.clear();occur.clear();}}
}

饥饿的小易(BFS问题)相关推荐

  1. 求解解救amaze问题求解饥饿的小易问题

    求解饥饿的小易问题 题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * ...

  2. 饥饿的小易、另类加法

    1.用命令方式运行以下代码的运行结果是(C) public class f{public static void main(String[] args){String foo1 = args[1];S ...

  3. 网易python笔试题_python 饥饿的小易(网易笔试题)

    本周早些时候,学弟给我发了一道网易的笔试题,饥饿的小易,感觉有点意思-分享给大家 题目描述: 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前 ...

  4. 饥饿的小易(枚举+广度优先遍历(BFS))

    题目描述 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x + 3或者8 * x + 7.因为使 ...

  5. 饥饿的小易(分枝限界法)

    一. 程序题(共1题,100分) (程序题) 小易总是感觉饥饿,所以作为章鱼的小易经常出去寻找贝壳吃.最开始小易在一个初始位置x_0.对于小易所处的当前位置x,他只能通过神秘的力量移动到 4 * x ...

  6. 剑指Offer——网易笔试之解救小易

    知识要点 首先介绍一下曼哈顿,曼哈顿是一个极为繁华的街区,高楼林立,街道纵横,从A地点到达B地点没有直线路径,必须绕道,而且至少要经C地点,走AC和 CB才能到达,由于街道很规则,ACB就像一个直角3 ...

  7. 2017年网易校招题 解救小易

    题目描述 有一片1000*1000的草地,小易初始站在(1,1)(最左上角的位置).小易在每一秒会横向或者纵向移动到相邻的草地上吃草(小易不会走出边界).大反派超超想去捕捉可爱的小易,他手里有n个陷阱 ...

  8. java http get_「面小易-面经12」阿里巴巴Java方向面试题汇总(含答案)

    简介: 从前几篇分享中能够看出,阿里不愧是"Java技术光明顶",无论是从Java方向的面经数量.质量,还是问题难度上来看,想要拿到阿里Java研发岗位的Offer,都需要面试者拥 ...

  9. 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。

    import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...

  10. 【网易笔试】小易最近在数学课上学习到了集合的概念

    /***************************************************** 小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性. ...

最新文章

  1. DDoS高防服务如何选择?
  2. 【Python】青少年蓝桥杯_每日一题_9.03_画三角形和半圆相切
  3. 用python做透视表_用Python实现数据的透视表的方法
  4. 2005年全球H.264编解码器荟萃
  5. 【转】 IIS_WPG 用户组权限问题
  6. PerlTidy的配置项
  7. UI基础设计规范,确定不了解一下?
  8. 《OpenACC并行程序设计:性能优化实践指南》一 第2章 性能导向开发
  9. 数据结构c语言描述第课后答案李学刚,数据结构(C语言描述)(第2版)
  10. java真实面试题(2)
  11. 矩阵运算_如何理解矩阵对矩阵求导?
  12. 【实用工具系列】MathCAD入门安装及快速上手使用教程
  13. Yolov4部署到ZYNQ系列1-USB转UART驱动不在COM和LPT显示问题的解决方案
  14. iOS开发:对于动态库共享缓存(dyld)的了解
  15. php 内网/外网ip判断
  16. 大疆DJI 精灵 4 RTK 镜头很暗 ISO
  17. 上海亚商投顾:沪指失守3300点 传媒、游戏板块逆市大涨
  18. Matlab:查找命令行窗口或历史记录中的文本
  19. 微pe工具箱+软碟通 制作 U盘启动盘
  20. Python DistributedDataParallel(DDP)训练模型

热门文章

  1. 2018年腾讯春招实习【CDG事业群产品策划岗】面试心得【已录用】
  2. android 自动安装 解析包错误,安卓android手机安装包频繁提示解析错误解决方法...
  3. 如何像打王者荣耀一样励志学习
  4. ftw遍历目录树 getcwd取得当前的工作目录
  5. A Survey on Conversational Recommender Systems
  6. 20191101(33) 针对 RT-Thread 下 ADS1256 移植说明(SPI)
  7. 世界上顶级英文歌曲首选
  8. Cryengine5.3
  9. 第九次java课堂笔记
  10. Java 笔试强训 牛客网选择编程题 02