网易2017秋招编程题:跳石板 [python]
来源:互联网 发布:c语言求出100以内素数 编辑:程序博客网 时间:2024/05/15 14:11
'''
[编程题] 跳石板
时间限制:1秒
空间限制:32768K
小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,
即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,
小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板
输入描述:
输入为一行,有两个整数N,M,以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)
输出描述:
输出小易最少需要跳跃的步数,如果不能到达输出-1
输入例子1:
4 24
输出例子1:
5
'''
'''
解题思路:广度优先搜索算法(BFS)? 动态规划?
使用BFS进行搜索,开始打算用递归,超时了,通过率只有50%,想着python递归效率低,就用循环重新实现了一遍,
仍超时,通过率只有50%,不知道是不是还有巧妙的方法,有的话请赐教!
查看了解析,看见大家都是用动态规划做的,我自己也用动态规划做了一遍,通过率只有40%,反而降低了...
虽然通过率不高,但我觉得我写的几个方法都还可以...
'''
'''
方法一和方法二都只有50%的通过率
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为50.00%
方法三只有40%的通过率
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为40.00%
[编程题] 跳石板
时间限制:1秒
空间限制:32768K
小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,
即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,
小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板
输入描述:
输入为一行,有两个整数N,M,以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)
输出描述:
输出小易最少需要跳跃的步数,如果不能到达输出-1
输入例子1:
4 24
输出例子1:
5
'''
'''
解题思路:广度优先搜索算法(BFS)? 动态规划?
使用BFS进行搜索,开始打算用递归,超时了,通过率只有50%,想着python递归效率低,就用循环重新实现了一遍,
仍超时,通过率只有50%,不知道是不是还有巧妙的方法,有的话请赐教!
查看了解析,看见大家都是用动态规划做的,我自己也用动态规划做了一遍,通过率只有40%,反而降低了...
虽然通过率不高,但我觉得我写的几个方法都还可以...
'''
'''
方法一和方法二都只有50%的通过率
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为50.00%
方法三只有40%的通过率
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为40.00%
'''
# #方法一# N, M = [int(each) for each in input().split()]## searched = set()# init_set = set()# init_set.add(N)### def jump(current_set):# wait_set = set()# for each in current_set:# if each == M:# return 0# else:# searched.add(each)# for k in range(2, each):# if each % k == 0 and each+k not in searched:# wait_set.add(each+k)# if min(wait_set) <= M:# temp = jump(wait_set)# if temp == -1:# return -1# else:# return 1 + temp# else:# return -1## print(jump(init_set))## # 方法二# from collections import deque# N, M = [int(each) for each in input().split()]## d = deque()# d.append(N)# flag = False# searched = set()# count = 0# while min(d) <= M:# length = len(d)# for i in range(length):# current = d.popleft()# if current == M:# flag = True# print(count)# break# else:# searched.add(current)# for k in range(2, current):# if current % k == 0 and current+k not in searched:# d.append(current+k)# if not flag:# count += 1# else:# break# if not flag:# print(-1)# 方法三N, M = [int(each) for each in input().split()]min_steps = [0]for i in range(N+1, M+1): temp_list = [] for j in range(N, i): if min_steps[j - N] != None: for k in range(2, j): if j % k == 0: if j + k == i: temp_list.append(min_steps[j-N] + 1) else: continue if temp_list: min_steps.append(min(temp_list)) else: min_steps.append(None)if min_steps[M-N] == None: print(-1)else: print(min_steps[M-N])
阅读全文
0 0
- 网易2017秋招编程题:跳石板 [python]
- 跳石板( 网易2017秋招编程题集合)
- 网易2017校招编程:跳石板
- 2017网易秋招笔试题 跳石板 C/C++
- 跳石板-2017网易校招
- 网易编程题--跳石板
- 2018校招笔试题——网易编程题跳石板
- 跳石板——网易校招
- 跳石板_网易编程
- 网易2017秋招编程题:买苹果 [python]
- 网易2017秋招编程题:优雅的点 [python]
- 网易2017秋招编程题:回文序列 [python]
- 网易2017秋招编程题:数字翻转 [python]
- 网易2017秋招编程题:暗黑的字符串 [python]
- 网易2017秋招编程题:最大奇约束 [python]
- 网易2017秋招编程题:计算糖果 [python]
- 网易2017 跳石板问题
- 网易笔试题:跳石板
- Windows、linux系统使用命令提示符功能(cmd,command,又称命令行)详细图文教程和手册下载
- 7-4 求幂级数展开的部分和(20 分)
- mongodb对于时间的存储问题
- Python的基础知识2
- cafffe数据层及参数
- 网易2017秋招编程题:跳石板 [python]
- 详解JavaScript中localStorage使用要点
- Vue2.0 心法 ==> 第二层:组件通信
- Spring boot入门demo
- 7-7 社交网络图中结点的“重要性”计算(30 分)
- Linux的vi-文本编辑
- 前端代码合集
- ISH Shanghai & CIHE 2017上海国际供热通风空调及舒适家居系统展览会会刊(参展商名录)
- Java抽象与接口