vivo2023年 演算法崗筆試題

2021-09-27 10:28:41 字數 1844 閱讀 7510

題目描述:

小v在公司負責遊戲運營,今天收到款申請新上架的遊戲「跳一跳」。為了確保提供給廣大玩家朋友們的遊戲都是高品質的,按照運營流程小v必須對新遊戲進行全方位了解體驗和評估。這款遊戲的規則如下:

有n個盒子排成了一行,每個盒子上面有乙個數字a[i],表示在該盒子上的人最多能向右移動a[i]個盒子(比如當前所在盒子上的數字是3,則表示可以一次向右前進1個盒子,2個盒子或者3個盒子)。

現在小v從左邊第乙個盒子上開始體驗遊戲,請問最少需要移動幾次能到最後乙個盒子上?

輸入描述:

輸入:2 2 3 0 4

表示現在有5個盒子,上面的數字分別是2, 2, 3, 0, 4。

輸出描述:

輸出: 2

小v有兩種跳法:

跳法1:盒子1--盒子2--盒子3--盒子4--盒子5,共3下

跳法2:盒子1--盒子3--盒子5,共2下

跳法2的步驟數量最少,所以輸出最少步數:2。

輸入:2 2 3 0 4

輸出:核心**:

int jump(int a, int n) 

return steps;

}

題目描述:

今年7月份vivo迎來了新入職的大學生,現在需要為每個新同事分配個工號。人力資源部同事小v設計了乙個方法為每個人進行排序並分配最終的工號,具體規則是:

將n (n<100000) 個人排成一排,從第1個人開始報數: 如果報數是m的倍數就出列,報到隊尾後則回到隊頭繼續報,直到所有人都出列;

最後按照出列順序為每個人依次分配工號。請你使用自己擅長的程式語言幫助小v實現此方法。

輸入描述:

輸入2個正整數,空格分隔,第乙個代表人數n,第二個代表m

輸出描述:

輸出乙個int陣列,每個資料表示原來在佇列中的位置用空格隔開,表示出列順序

輸入:6 3

輸出:3 6 4 2 5 1

這道題目就是簡單的約瑟夫環

核心**:

void loop(int n,int m)}}

if(i==(n-1))

}cout << endl;

}

題目描述:

小v最近在玩一款挖礦的遊戲, 該遊戲介紹如下:

1、每次可以挖到多個礦石,每個礦石的重量都不一樣,挖礦結束後需要通過一款平衡礦車運送下山; 

2、平衡礦車有左右2個車廂,中間只有1個車輪沿著導軌滑到山下,且礦車只有在2個車廂重量完全相等且礦石數量相差不超過1個的情況下才能成功運送礦石,否則在轉彎時可能出現側翻。

假設小v挖到了n (n<100) 個礦石,每個礦石重量不超過100,為了確保一次性將n個礦石都運送出去,一旦礦車的車廂重量不一樣就需要購買配重砝碼。請問小v每次最少需要購買多少重量的砝碼呢? (假設車廂足夠放下這些礦石和砝碼,砝碼重量任選)

輸入描述:

輸入n個正整數表示每個礦石的重量

輸出描述:

輸出乙個正整數表示最少需要購買的砝碼重量

輸入:3 7 4 11 8 10

輸出:說明:

小v可以將重量3,7和11的礦石放到左車廂,重量4,8和10放到右車廂,然後購買重量為1的砝碼放到左車廂。

題解:其實可以轉換為求n個數分成兩半,使絕對值差就小,我們可以轉化為01揹包去做。

這個題目當時只過了差不多百分之八十,一直沒有搞懂原因,今天摘抄題目的時候才發現題目要求是礦石的數量最多相差為1,哭唧唧,現在貼的是提交的**,正確的之後再改吧!!!!

**:

void loop(int n, int weight)

2023年vivo提前批開發崗筆試

筆試共三道大題,不是很難,但是編譯器爛的要死,還不讓用本地編譯器。第一道題 輸入陣列a和陣列b,刪除陣列a中b中存在的元素!輸入描述 a b 輸出描述 class solution if flag false array1 k array1 i for int i 0 i k i cout arra...

2023年vivo提前批開發崗筆試

筆試共三道大題,不是很難,但是編譯器爛的要死,還不讓用本地編譯器。第一道題 輸入陣列a和陣列b,刪除陣列a中b中存在的元素!輸入描述 a b 輸出描述 class solution if flag false array1 k array1 i for int i 0 i k i cout arra...

vivo2019秋招筆試題 運礦石(01揹包)

給定n n 100 個數,每個數不超過100,你需要把n個數分成兩堆,兩堆個數相差最多為1,且兩堆的權值和之差最小,問最小的差是多少?01揹包,因為每個數不超過100,總和不超過10000,所以我們可以判斷每個和空間是否可以到達。dp j k 表示選擇了j個元素,此時和為k是否可行,這裡滾動了一維 ...