跳石板 網易2017秋招程式設計題

2021-10-03 17:46:51 字數 1234 閱讀 5397

小易來到了一條石板路前,每塊石板上從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

輸入4 24

輸出本題有兩種解法:

1.貪心演算法

本題用貪心演算法求解並不會得到最優解,通過率在c++11下只有80%,具體方式就是,每次以i(i為(1,n)之中n的約數)為步長進行跳躍,一直跳看能不能到m點,若不能則回溯,重新選擇i值進行下一次迴圈。

貪心演算法的c++**如下:

#include

using

namespace std;

intjump

(int n,

int m)

else}}

return-1

;}intmain()

2.動態規劃(dynamic programming)

dp是將乙個問題拆成幾個子問題,分別求解這些子問題,即可推斷出大問題的解,它是自帶剪枝的。

其實dp就是要把握三個問題:

1.我是誰

2.我從**來

3.我到**去

詳細分析見**注釋:

dp演算法的c++**如下:

#include

#include

#include

#include

using

namespace std;

intmain()

if(i+

(i/j)

<=m)

//在平方根之外的情況也需要考慮}}

}if(step[m]

==100000

) step[m]=-

1;cout<<}return0;

}

網易2017秋招程式設計題

小易有乙個圓心在座標原點的圓,小易知道圓的半徑的平方。小易認為在圓上的點而且橫縱座標都是整數的點是優雅的,小易現在想尋找乙個演算法計算出優雅的點的個數,請你來幫幫他。例如 半徑的平方如果為25 優雅的點就有 3,4 4,3 0,5 5,0 一共12個點。輸入描述 輸入為乙個整數,即為圓半徑的平方,範...

網易2017秋招程式設計題

第一題 如果乙個數字序列逆置之後跟原序列是一樣的就稱這樣的數字串行為回文序列。例如 是回文序列,不是回文序列。現在給出乙個數字序列,允許使用一種轉換操作 選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置 只插入乙個和 現在對於所給序列要求出最少需要多少次操作可...

網易2017秋招程式設計題集合

一 如果乙個數字序列逆置之後跟原序列是一樣的就稱這樣的數字串行為回文序列。例如 是回文序列,不是回文序列。現在給出乙個數字序列,允許使用一種轉換操作 選擇任意兩個相鄰的數,然後從序列移除這兩個數,並用這兩個數字的和插入到這兩個數之前的位置 只插入乙個和 現在對於所給序列要求出最少需要多少次操作可以將...