2017網易遊戲程式設計筆試題 第一題

2021-08-15 09:47:05 字數 1473 閱讀 3794

題目描述: 目前有一款益智小遊戲,對經典的吃豆子遊戲進行了改編。玩家將在類似如下圖中所示的網格地圖中進行遊戲,當玩家將所有的「豆子」吃完後,遊戲便結束。具體的遊戲規則如下: 1.玩家在遊戲開始後,出生在地圖的左上角,且面朝右側。

2.玩家每次只能移動一格,移動的方式只能從如下兩種方式中選擇一種: a.按玩家當前的朝向水平移動一格(如果玩家目前面朝右側,則玩家向右移動一格;如果玩家目前面朝左側,則玩家向左移動一格)。

b.向下移動一格。但是每次向下移動後,玩家的朝向都會發生改變,如果玩家目前面朝右側,向下移動一格後,將面朝左側,反之亦然。 3.當玩家移動到「有豆子」的地方,就會將豆子「吃掉」,「吃掉」的操作為遊戲自動完成。

4.當玩家將地圖中所有豆子都「吃掉」後,遊戲通關成功,並且將統計玩家移動所花的總步數,步數越少獲得的積分越高。

現在希望你為遊戲編寫乙個「外掛程式」,當遊戲地圖載入後,自動規劃計算出能讓遊戲通關且所花步數最少的方案;為了方便起見,只需要你輸出步數。

輸入 第一行將輸入兩個數n和m(1<=n, m<=150)用空格隔開,分別代表當前載入地圖的行數和列數。接下來的n行均將輸入m個字元,用於描述地圖的內容。其中』e』代表該格內沒有豆子,』w』代表有豆子。我們確保左上角的格仔即出生點內沒有豆子。

輸出 乙個整數,使遊戲通關的最少步數。

輸入樣例

4 5

eweew

eewee

eweee

weeee

輸出樣例

11

思路:記錄每行最前乙個豆子的位置和最後一次豆子的位置,比較當前行和下一行的位置,並取最長距離走(因為沒有走過的地方之後是不會再走的),並用乙個標記,記錄上次走到的位置,每次加步數之前要減掉前面沒走的距離(因為記錄的是下標)

除了最後一行每次走完都要步數加一,表示移動到了下一行

#include#include#includeusing namespace std;

int main() ;

for (int a = 0; a < m; a++)

}if (flag == -1 && !ji)

flag = a;

if (flag != -1 && ji)

flag = -1;

}int ji = 1;

for (int a = 0; a<(flag==-1?m:flag); a++)

if (a & 1)

ans += max(n - mp[a][0], n - mp[a + 1][0]) - (n - ji) + 1, ji = max(mp[a][0], mp[a + 1][0]);

else

ans += max(mp[a][1], mp[a + 1][1]) - ji, ji = max(mp[a][1], mp[a + 1][1]);

ans++;

}cout << ans << endl;

}return 0;

}

(原創)名企筆試 2017網易遊戲筆試 (賽馬)

在一條無限長的跑道上,有n匹馬在不同的位置上出發開始賽馬。當開始賽馬比賽後,所有的馬開始以自己的速度一直勻速前進。每匹馬的速度都不一樣,且全部是同樣的均勻隨機分布。在比賽中當某匹馬追上了前面的某匹馬時,被追上的馬就出局。請問按以上的規則比賽無限長的時間後,賽道上剩餘的馬匹數量的數學期望是多少?輸入描...

2012網易筆試題

1 24小時內,表的時針 分針 秒針完全重合多少次?分別是什麼時刻。2 100萬條記錄,可以通過權值比較大小,選取權值最大的前100條記錄,並有序排列後輸出 3 鏈式資料結構,檢測是否有環 4 用反射建立classa的例項和classa陣列的例項 5 聯合索引的問題。問select語句如何寫,才能用...

2012 10 10網易筆試題

一.用位運算實現加法 int add int a,int b 二.確定cpu的大小端方式 筆試的時候此題做錯了,竟用移位去做.對於此操作,移位不起作用.int main 三.圖的深度遍歷 筆試的時候沒有寫出來,寫出思路為利用棧乙個個結點壓入.直到棧頂那個結點無指向子鏈結或連線已遍歷過或指向的鏈結的結...