2018校招笔试题——网易编程题跳石板
来源:互联网 发布:软件企业即征即退期限 编辑:程序博客网 时间:2024/05/22 12:56
时间限制:1秒
空间限制:32768K
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为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
由题目可知,这是一道动态规划的问题,具体思路如下:
1、从第一个n的石板开始,计算它的约数,约数加上n即为所有能到达的位置,定义一个数组res长度为m+1,res里面每一个i对应存储的是到该位置的最小步数,如果不能到达,则为0;
2、从n开始,先求其约数,再得到能到达的位置,之后不断更新到某一位置的最小步数,遍历res之后得到最终结果。
具体解答请看下面的C++代码:
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
/*求约数的函数,如果除的尽,存入vector,如果除的尽而且不是平方根,就把另一个除数也存入vector中*/
void getyueshu(int n,vector<int> &v){
int i;
for(i=2;i<=sqrt(n);i++){
if(n%i==0){
v.push_back(i);
if(n/i!=i)
{
v.push_back(n/i);
}
}
}
}
int Jump(int N, int M) /*res存储的是到达每一个i,即到每一块石板的最小步数*/
{
vector<int> res(M + 1, 0);//储存的到达此res点的步数,初始N为1步
res[N] = 1;
for (int i = N; i < M; i++)
{
vector<int> yueshu;//N的所有约数,即为从本身这个点开始能走的数量
if (res[i] == 0)
continue;//0代表这个点不能到
getyueshu(i, yueshu);//求出所有能走的步数储存在yueshu的容器中
for (int j = 0; j < yueshu.size(); j++)
{
//由位置i出发能到达的点为 res[yueshu[j]+i]
if ((yueshu[j] + i) <= M&&res[yueshu[j] + i] != 0)
res[yueshu[j] + i] = min(res[yueshu[j] + i], res[i] + 1);
else if ((yueshu[j] + i) <= M)
res[yueshu[j] + i] = res[i] + 1;
}
}
if (res[M] == 0)
return -1;
else
return res[M] - 1;
}
int main()
{
int n,m;
cin>>n>>m;
int res=Jump(n,m);
cout<<res<<endl;
return 0;
}
- 2018校招笔试题——网易编程题跳石板
- 跳石板——网易校招
- 2017网易秋招笔试题 跳石板 C/C++
- 网易笔试题:跳石板
- 网易笔试题--跳石板
- 网易2017校招编程:跳石板
- 跳石板( 网易2017秋招编程题集合)
- 网易2017秋招编程题:跳石板 [python]
- 网易编程题--跳石板
- 跳石板-2017网易校招
- (网易2018校招笔试)[编程题] 魔法币
- (网易2018校招笔试)[编程题] 相反数
- (网易2018校招笔试)[编程题] 字符串碎片
- (网易2018校招笔试)[编程题]相反数
- (网易2018校招笔试)[编程题] 游历魔法王国
- (网易2018校招笔试)[编程题] 字符串碎片
- (网易2018校招笔试)[编程题] 魔法币
- (网易2018校招笔试)[编程题] 相反数
- 重新复习的JAVA基础(浅出)!留着慢慢看。。
- org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1,actual 0 1
- [Leetcode] 349. Intersection of Two Arrays 解题报告
- C# RSA加密与解密
- 01 HDFS
- 2018校招笔试题——网易编程题跳石板
- 如何用合泰触摸软件包生成的文件,建立一个工程项目。
- 线段树
- 杭电acm1862 EXCEL排序的实现
- 通过@Formula计算年龄的问题
- eclipse工程当中的.classpath 和.project文件什么作用?
- JavaScript的CryptoJS AES/ECB/NoPadding加密,可与JAVA objective-c 进行同步加解密
- KindEditor/使用方法
- 关于GalleryFinal 对.png图片剪裁的问题