成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

網(wǎng)易2017秋招編程題集合+自己的結(jié)果

LiveVideoStack / 1317人閱讀

摘要:小易當(dāng)前處在編號為的石板,他想跳到編號恰好為的石板去,小易想知道最少需要跳躍幾次可以到達(dá)。一天小易遇到這樣一個問題定義函數(shù)為最大的奇數(shù)約數(shù),為正整數(shù)。可是小易現(xiàn)在只想購買恰好個蘋果,小易想購買盡量少的袋數(shù)方便攜帶。

前言

周末利用無聊的時間見識了一下網(wǎng)易的秋招編程題也嘗試用javascript來實(shí)現(xiàn),總體的難度對我來說簡直是{{BANNED}}-_-!,不過最后總算在自己的能力范圍內(nèi)解決了六道,其中有一道是參考了另一位大神的思路最終用代碼實(shí)現(xiàn),還有一道反正我怎么想也想不出來~~有興趣的大神們可以嘗試一下讓我觀摩觀摩哈哈,下面放題

1.回文序列

題目:
如果一個數(shù)字序列逆置之后跟原序列是一樣的就稱這樣的數(shù)字序列為回文序列。例如:
{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列,
{1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。
現(xiàn)在給出一個數(shù)字序列,允許使用一種轉(zhuǎn)換操作:
選擇任意兩個相鄰的數(shù),然后從序列移除這兩個數(shù),并用這兩個數(shù)字的和插入到這兩個數(shù)之前的位置(只插入一個和)。
現(xiàn)在對于所給序列要求出最少需要多少次操作可以將其變成回文序列。

輸入例子:[1,1,1,3]

輸出例子:2

我的思路:首先清楚了回文序列的定義之后我可以用輸入的數(shù)組的字符串以及該數(shù)組倒序后的字符串進(jìn)行比較,以此來作為是否是回文序列的判斷,后觀察發(fā)現(xiàn)若需要最少操作來實(shí)現(xiàn)回文序列則必須使數(shù)字較小的數(shù)據(jù)來與后一個數(shù)據(jù)相加,舉輸入例子來說,數(shù)組第一位和最后一位的數(shù)字是1比3小,那么我在相加的時候就得拿1和后面的數(shù)字相加才能盡可能的與末尾的3相等。

var result = 0;
function fn(arr){
    var revArr = arr.slice(0).reverse();
    if(revArr.join("")==arr.join("")){
        return result
    }
    else if (revArr[0]==arr[0]) {
        arr.shift();
        arr.pop()
        return fn(arr)
    }
    else {
        revArr.splice(0,2,revArr[0]+revArr[1])
        arr.splice(0,2,arr[0]+arr[1])
        arr[0]>revArr[0]?fn(revArr):fn(arr);
        return ++result
    }
}

var arr = [3,1,1,2,2]
console.log(fn(arr))
2.優(yōu)雅的點(diǎn)

題目:
小易有一個圓心在坐標(biāo)原點(diǎn)的圓,小易知道圓的半徑的平方。
小易認(rèn)為在圓上的點(diǎn)而且橫縱坐標(biāo)都是整數(shù)的點(diǎn)是優(yōu)雅的,
小易現(xiàn)在想尋找一個算法計(jì)算出優(yōu)雅的點(diǎn)的個數(shù),請你來幫幫他。
例如:半徑的平方如果為25
優(yōu)雅的點(diǎn)就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5, 0),一共12個點(diǎn)。
輸出為一個整數(shù),即為優(yōu)雅的點(diǎn)的個數(shù)

輸入例子:25

輸出例子:12

我的思路:這題我在審題的時候誤把園內(nèi)的點(diǎn)也算在內(nèi)了,其實(shí)只是要求在圓上的點(diǎn)既可,該題有點(diǎn)像數(shù)學(xué)里的勾股定理,同理,我在做判斷的時候就是用半徑的平方減去遍歷的每一個坐標(biāo)點(diǎn)的橫坐標(biāo)的平方的結(jié)果再進(jìn)行一個開方,然后判斷該數(shù)是否為整數(shù),又因?yàn)樵搱A的圓心是坐標(biāo)原點(diǎn),那么符合條件的每一個坐標(biāo)點(diǎn)都有4個方向,同時又要注意是否有坐標(biāo)為0的情況,若有則減去4(例如:(0,+-5)和(+-5,0))

function fn(Powr){
    var sum = [];
    var less = 0;
    if(typeof Powr == "number"){
        for(var i=0;i<=Math.sqrt(Powr);i++){
            var coordinate = Math.sqrt(Powr-Math.pow(i,2))
            if(coordinate.toString().split(".")[1]==undefined){ //驗(yàn)證開方后是否為整數(shù)
                if(i==0){
                    less=4; //驗(yàn)證是否存在有圓點(diǎn)的情況
                }
                sum.push({i,coordinate})
            }
        }
        return sum.length*4-less
    }
    else{
        return "請輸入數(shù)字好嗎";
    }
}

var Powr = 25;
console.log(fn(Powr))
3.跳石板

題目:
小易來到了一條石板路前,每塊石板上從1挨著編號為:1、2、3.......
這條石板路要根據(jù)特殊的規(guī)則才能前進(jìn):對于小易當(dāng)前所在的編號為K的 石板,
小易單次只能往前跳K的一個約數(shù)(不含1和K)步,即跳到K+X(X為K的一個非1和本身的約數(shù))的位置。
小易當(dāng)前處在編號為N的石板,他想跳到編號恰好為M的石板去,小易想知道最少需要跳躍幾次可以到達(dá)。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳躍5次,就可以從4號石板跳到24號石板

輸入例子:4 24

輸出例子:5

我的思路:這題。。。我能力有限,思路只想到用窮舉這個方法了,所以大神們?nèi)绻信d趣的話可以提供一下思路啊哈哈哈~

4.暗黑的字符串

題目:
一個只包含"A"、"B"和"C"的字符串,
如果存在某一段長度為3的連續(xù)子串中恰好"A"、"B"和"C"各有一個,那么這個字符串就是純凈的,
否則這個字符串就是暗黑的。例如:
BAACAACCBAAA 連續(xù)子串"CBA"中包含了"A","B","C"各一個,所以是純凈的字符串
AABBCCAABB 不存在一個長度為2的連續(xù)子串包含"A","B","C",所以是暗黑的字符串
你的任務(wù)就是計(jì)算出長度為n的字符串(只包含"A"、"B"和"C"),有多少個是暗黑的字符串。

輸入例子:2,3

輸出例子:9,21

我的思路:這題的話坦白講考的并不是代碼,而是數(shù)學(xué)??!一開始我想著就是用3的n次方減去純凈的字符串個數(shù)那么得出來的就是暗黑的字符串,但我看了下面這個圖,我簡直膜拜

具體的代碼實(shí)現(xiàn)比較簡單,關(guān)鍵還是思路以及MATH!!

function fn(num){
    
    if(num==1){
        return 3
    }
    else if(num==2){
        return 9
    }
    else{
        return 2*fn(num-1)+fn(num-2)
    }

}

var num=3;
console.log(fn(num))
5.數(shù)字翻轉(zhuǎn)

題目:
對于一個整數(shù)X,定義操作rev(X)為將X按數(shù)位翻轉(zhuǎn)過來,并且去除掉前導(dǎo)0。例如:
如果 X = 123,則rev(X) = 321;
如果 X = 100,則rev(X) = 1.
現(xiàn)在給出整數(shù)x和y,要求rev(rev(x) + rev(y))為多少?

輸入例子:123,100

輸出例子:223

我的思路:該題相對來說不算很難,整體的思路就是利用數(shù)組里的reverse,關(guān)鍵就是如何把數(shù)字的每一位轉(zhuǎn)為對應(yīng)的數(shù)組

function rev(num){
    var revArr = num.toString().split("").reverse().join("");
    return parseInt(revArr)
}

var x = 123;
var y = 100;
console.log(rev(rev(x) + rev(y)))
6.最大的奇約數(shù)

題目:
小易是一個數(shù)論愛好者,并且對于一個數(shù)的奇數(shù)約數(shù)十分感興趣。
一天小易遇到這樣一個問題: 定義函數(shù)f(x)為x最大的奇數(shù)約數(shù),x為正整數(shù)。 例如:f(44) = 11.
現(xiàn)在給出一個N,需要求出 f(1) + f(2) + f(3).......f(N)
例如: N = 7
f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 + 7 = 21
小易計(jì)算這個問題遇到了困難,需要你來設(shè)計(jì)一個算法幫助他。

輸入例子:7

輸出例子:21

我的思路:該題的題意不難理解,明白的題意實(shí)現(xiàn)起來并不難,這里我用approximately函數(shù)來獲取我輸入的數(shù)字的所有約數(shù),再經(jīng)過判斷獲取最大的奇數(shù)約數(shù)從而實(shí)現(xiàn),一開始我想到的是遞歸方法,不過。。能不用遞歸就不用遞歸對吧^ ^

function fn(num){
    var sum = 0;
    for(var j=num;j>0;j--){
        var apprNum = approximately(j);
        for(var i=apprNum.length-1;i>=0;i--){
            if(apprNum[i]%2){
                sum += apprNum[i];
                break;
            }
        }
    }
    return sum
}

function approximately(num){
    var result = []
    for(var i=1;i<=num;i++){
        if(num%i==0){
            result.push(i)
        }
    }
    if(result.length>0){
        return result
    }else{
        return false
    }
}

console.log( fn(7) )
7.買蘋果

題目:
小易去附近的商店買蘋果,奸詐的商販?zhǔn)褂昧死壗灰祝?br>只提供6個每袋和8個每袋的包裝(包裝不可拆分)。 可是小易現(xiàn)在只想購買恰好n個蘋果,小易想購買盡量少的袋數(shù)方便攜帶。
如果不能購買恰好n個蘋果,小易將不會購買。

輸入例子:20

輸出例子:3

我的思路:輸出的結(jié)果只能是偶數(shù),且每次包裝袋子的時候都是盡量選擇8個每袋包裝的袋子,這樣可以盡可能用最少的袋子來購買蘋果,所以我列舉了前幾個比較特殊的選袋情況作為遞歸的判斷條件(用一次遞歸嘿嘿),代碼如下

var freq = 0;
function fn(num){
    if(!(num%2)&&num>=12){
        if(num==12||num==14||num==16){
            return freq+=2;
        }
        else if(num==18){
            return freq+=3;
        }
        else{
            ++freq
            return fn(num-8)
        }
    }
    else{
        return -1;
    }
}

console.log(fn(40))
8.計(jì)算糖果

題目:
A,B,C三個人是好朋友,每個人手里都有一些糖果,我們不知道他們每個人手上具體有多少個糖果,但是我們知道以下的信息:
A - B, B - C, A + B, B + C. 這四個數(shù)值.每個字母代表每個人所擁有的糖果數(shù).
現(xiàn)在需要通過這四個數(shù)值計(jì)算出每個人手里有多少個糖果,即A,B,C。這里保證最多只有一組整數(shù)A,B,C滿足所有題設(shè)條件

輸入例子:1 -2 3 4

輸出例子:2 1 3

我的思路:一開始我是比較笨的才用分別利用輸入的例子的每一個對應(yīng)關(guān)系來寫式子從而一個一個遍歷判斷,但其實(shí)經(jīng)過觀察可以發(fā)現(xiàn)A-B和A+B這兩種情況相加后得出來的結(jié)果是2A,依次類推,后面就迎刃而解了

function fn(num){
    var A = (num[0]+num[2])/2;
    var B = (num[1]+num[3])/2;
    if(A.toString().split(".")[1]==undefined&&B.toString().split(".")[1]==undefined){
        var C = num[3]-B;
        return A+" "+B+" "+C
    }
    else{
        return "No"
    }
}

var num = [1,-2,3,4]
console.log(fn(num))

PS:有的題可能還有更好的解法,只是暫時還沒想出來,主要就是那個跳石板怎么想都想不出來,希望有大神來幫忙解答哈哈^

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91272.html

相關(guān)文章

  • 「碼個蛋」2017年200篇精選干貨集合

    摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計(jì)篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學(xué)習(xí),特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...

    wangtdgoodluck 評論0 收藏0
  • 阿里秋招內(nèi)推編程

    摘要:參加了阿里的內(nèi)推。面試前被要求做了一道編程題,現(xiàn)在分享一下。題目知識點(diǎn)閉包,構(gòu)造函數(shù)與原型。題目要求的是點(diǎn)擊相應(yīng)的刪除按鈕刪除列表的相應(yīng)行。后來思考了一下,將循環(huán)內(nèi)的代碼改為。 2017.8參加了阿里的內(nèi)推。面試前被要求做了一道編程題,現(xiàn)在分享一下。 題目要求:巴拉巴拉具體忘記了,大概就是一個列表,每個列表后面有個刪除按鈕,點(diǎn)擊相應(yīng)的刪除按鈕就可以刪除相應(yīng)的列表的其中一行,并且要以面向...

    xinhaip 評論0 收藏0
  • 阿里秋招內(nèi)推編程

    摘要:參加了阿里的內(nèi)推。面試前被要求做了一道編程題,現(xiàn)在分享一下。題目知識點(diǎn)閉包,構(gòu)造函數(shù)與原型。題目要求的是點(diǎn)擊相應(yīng)的刪除按鈕刪除列表的相應(yīng)行。后來思考了一下,將循環(huán)內(nèi)的代碼改為。 2017.8參加了阿里的內(nèi)推。面試前被要求做了一道編程題,現(xiàn)在分享一下。 題目要求:巴拉巴拉具體忘記了,大概就是一個列表,每個列表后面有個刪除按鈕,點(diǎn)擊相應(yīng)的刪除按鈕就可以刪除相應(yīng)的列表的其中一行,并且要以面向...

    dcr309duan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<