題解 2018校招真題(位元組跳動 附加題)

2021-09-10 18:14:24 字數 1818 閱讀 7965

二階魔方又叫小魔方,是2*2*2的立方形結構。每一面都有4個塊,共有24個塊。每次操作可以將任意一面逆時針或者順時針旋轉90°,如將上面逆時針旋轉90°操作如下。

nero在小魔方上做了一些改動,用數字替換每個塊上面的顏色,稱之為數字魔方。魔方上每一面的優美度就是這個面上4個數字的乘積,而魔方的總優美度就是6個面優美度總和。

現在nero有乙個數字魔方,他想知道這個魔方在操作不超過5次的前提下能達到的最大優美度是多少。

魔方展開後每一塊的序號如下圖:

輸入一行包含24個數字,按序號順序給出魔方每一塊上面的數字。所有數大小範圍為[-100,100]。
輸出一行包含乙個數字,表示最大優美度。
示例1

複製

2 -3 -2 3 7 -6 -6 -7 9 -5 -9 -3 -2 1 4 -9 -1 -10 -5 -5 -10 -4 8 2
複製

8281
這道題粗略一看很難,靜下心來仔細想一想,就是寫出轉動的過程,然後用dfs進行遍歷,求出最大值就行了。

#include //定義乙個最小值

long max = -0x3fff;

//轉動魔方

void swap(int a,int b,int c,int d,int arr)

//右面的轉動

void right(int arr)

void left(int arr)

void up(int arr)

void down(int arr)

void front(int arr)

void began(int arr)

//求當前形態下的完美值

long getsum(int arr)

//dfs遍歷

void dfs(int arr,int depth)

int newarr[24];

for(int i=0;i<24;i++)

newarr[i] = arr[i];

right(newarr);

dfs(newarr,depth-1);

for(int i=0;i<24;i++)

newarr[i] = arr[i];

left(newarr);

dfs(newarr,depth-1);

for(int i=0;i<24;i++)

newarr[i] = arr[i];

up(newarr);

dfs(newarr,depth-1);

for(int i=0;i<24;i++)

newarr[i] = arr[i];

down(newarr);

dfs(newarr,depth-1);

for(int i=0;i<24;i++)

newarr[i] = arr[i];

front(newarr);

dfs(newarr,depth-1);

for(int i=0;i<24;i++)

newarr[i] = arr[i];

began(newarr);

dfs(newarr,depth-1);

}int main()

dfs(map,5);

printf("%ld\n",max);

return 0;

}

位元組跳動2019校招前端筆試

題目描述 開心消消樂 給定乙個一維的正整數陣列,逐次選擇其中乙個數做消除,消除所獲得的分數為當前數字和左右相鄰數字的乘積 當左邊或者右邊沒有數字可以認為是1 e.g.輸入陣列 3,1,5,8 step1 消除1 獲得分數 15 3x1x5,陣列變為 3,5,8 step2 消除5,獲得分數 120 ...

位元組跳動2019校招前端筆試

題目描述 給一些駝峰式的變數名,將它們轉換為下劃線式的,要求及說明如下 輸入資料一定為合法的 駝峰式 變數名,變數名由若干單詞組成,單詞應當為首字母大寫,或全大寫,或全小寫。如 variable onevariable onehttprequest 如 variable one variable o...

位元組跳動校招 附加題(Python)

存在n 1個房間,每個房間依次為房間1 2 3.i,每個房間都存在乙個傳送門,i房間的傳送門可以把人傳送到房間pi 1 pi i 現在路人甲從房間1開始出發 當前房間1即第一次訪問 每次移動他有兩種移動策略 a.如果訪問過當前房間 i 偶數次,那麼下一次移動到房間i 1 b.如果訪問過當前房間 i ...