程式設計之美 網易遊戲 2017實習筆試題

2021-08-17 17:22:23 字數 3689 閱讀 5471

題目1:

給定乙個字串,請你將字串重新編碼,將連續的字元替換成「連續

出現的個數+字元」。比如字串aaaabccdaa會被編碼成4a1b2c1d2a。

.統計連續出現的字元數目.注意數字字串之間轉換,別要在這些細節上浪費太多時間,要不然後邊題沒時間做!**:

#include

#include

int main()

// kong zi fu

int cnt =1 ;

for(int i =1 ; i< s.length(); i++)

if(s[i-1]==s[i])cnt++;

else

std::stringstream ss;

std::string str;

ss<>str;

res = res +str +s[s.length()-1];

std::cout

0;}

.題目2:

在乙個n*n的陣列中尋找所有橫,豎,左上到右下,右上到左下,四種方向的直線連續d個數字的和裡面最大的值

.可優化之處在於」連續」 n 個數字和,n大於等於d,每次當和中包含的數字第一次大於n時,要想得到當前和,只需要減去上一次最後乙個 

值再加上當前的值就可以了, 每次遍歷求和時間o(n),橫豎斜著遍歷去找就可,總時間o(n^2) 

考察程式設計熟練啊,被bug卡住就杯具了 

.**;

#include

#include

using

std::cin;

using

std::cout;

using

std::vector;

using

std::endl;

int main()

csum =0 ;

for(int j =0 ; j < n ; j++)

} int i = n-1 , j = 0;

while(i>=0)

j++;

} i =0 ; j = 0;

while(jint m = i , n = j;

int cnt =0;

int csum =0 ;

while(m=0)

j++;

} i = 1; j =n-1;

while(i < n)

.題目3:

大家一定玩過「推箱子」這個經典的遊戲。具體規則就是在乙個n*m的地

圖上,有1個玩家、1個箱子、1個目的地以及若干障礙,其餘是空地。

玩家可以往上下左右4個方向移動,但是不能移動出地圖或者移動到障

礙裡去。如果往這個方向移動推到了箱子,箱子也會按這個方向移動一

格,當然,箱子也不能被推出地圖或推到障礙裡。當箱子被推到目的地

以後,遊戲目標達成。現在告訴你遊戲開始是初始的地圖布局,請你求

出玩家最少需要移動多少步才能夠將遊戲目標達成。

.輸入格式**注釋裡有,*表示箱子,x表示人,@表示目的地,#表示障礙

.後來做才發現這是寬度優先的題目,在乙個圖結構當中如果每條邊權重是1的話,寬度優先搜尋第一次到達目的地步數就是到此位置的最小代價. 分析這道題最好的方式就是畫出狀態轉移關係,小人和箱子的位置確定了當前玩家的乙個狀態,下一步要去往的狀態無非是這麼兩種情況: 

. 人走到另乙個空地,箱子沒動 

.人推箱子前進一步

.宣告乙個四位陣列來st,當前狀態表示為st[x][x][bx][bx]:人位

置(x,y),箱子位置(bx,by),並將初始位置陣列值設為1,將初始值壓

入乙個佇列中

.每次從佇列中取出乙個元素,寬度優先下乙個未曾到達的狀態(以上分

析的兩種)判斷箱子是否到達終點.如果是列印路長並退出.

.沒有找到相關路徑列印-1.

#include

#include

#include

using

std::cin ;

using

std::cout;

using

std::vector;

using

std::endl;

using

std::queue;

/*4 4

....

..*@

....

.x..

*/int st[10][10][10][10];

int x,y,bx,by,tx,ty;

int m , n ;

vector

> mm ;

bool valid(int x,int y )

int main()

if(t == '*')

if(t == '@')

mm[i][j] = t;

} // record every state of the

vector

> next= ,,,};

queue

> que ;

que.push();

st[x][y][bx][by] =1 ;

while(!que.empty())

);continue;

}else

if(nx==bx&&ny==by&&valid(nnx,nny)&&st[nx][ny][nnx][nny]==0)

que.push();}}

} cout

<<-1;

return

0;}

.題目4:

在一條無限長的跑道上,有n匹馬在不同的位置上出發開始賽馬。當開

始賽馬比賽後,所有的馬開始以自己的速度一直勻速前進。每匹馬的速

度都不一樣,且全部是同樣的均勻隨機分布。在比賽中當某匹馬追上了

前面的某匹馬時,被追上的馬就出局。 請問按以上的規則比賽無限長

的時間後,賽道上剩餘的馬匹數量的數學期望是多少

.開始認為幾匹快馬速度一樣才可能同時留下來,沒好好讀題,其實人家說了馬的速度都不一樣.假設幾匹馬的速度是a

1<..

.a1 ,ai匹馬留下概率是p(i),p(i

)=1/

ip(i)=1/i

, 因為只有在第一匹快馬後面才能留下來,這是i種情況之一, 第i匹馬留下期望0∗(

i−1)

/i+1

/i0∗(i−1)/i+1/i

,由e(x+

y)=e

(x)+

e(y)

e(x+y)=e(x)+e(y)

得到所有馬期望和1 + 1 / 2 + 1 / 3 + 1 / 4 + … + 1 / n,就是調和級數。

#include

#include

#include

using

std::cin;

using

std::cout;

int main()

float sum =0.0;

for(int i =1 ; i<=n ; i++)

printf("%.4f",sum);

return

0;}

網易遊戲實習程式設計題

1.給定乙個字串,請你將字串重新編碼,將連續的字元替換成 連續出現的個數 字元 比如字串aaaabccdaa會被編碼成4a1b2c1d2a。輸入描述 每個測試輸入包含1個測試用例 每個測試用例輸入只有一行字串,字串只包括大寫英文本母,長度不超過10000。輸出描述 輸出編碼後的字串 include ...

網易遊戲2017互娛實習筆試程式設計(強化裝備)

題目描述 網遊中,裝備強化是提公升角色戰力的常見方法。現在你參與開發的遊戲中也有這項功能,團隊正在設計每件裝備強化所能提公升的戰力及需要消耗的金幣數。為了設計出乙個合理的強化系統,決定先做一些強化模擬測試,而你現在就在是該模擬程式的開發者。假設現在有n件可以同時穿戴的裝備,對於第i件裝備,最多可以強...

程式設計之美 24點遊戲

一,概述 二十四點是一種益智遊戲,它能在遊戲中鍛鍊人們的心算,它往往要求人們將四個數字進行加減乘除 允許使用括號 求得二十四。然後將四個數字的計算公式表示出來。二,中綴表示式求解 最直接的方法就是採用窮舉法,遊戲中可用的運算子只有四種,四個數字每個只能使用一次。1 不考慮括號情況 4個數全排列 4!...