位元組跳動2017後端工程師實習生筆試題分析及答案

2021-09-14 06:24:45 字數 1617 閱讀 7522

有 n 個字串,每個字串都是由 a-j 的大寫字元構成。現在你將每個字元對映為乙個 0-9 的數字,不同字元對映為不同的數字。這樣每個字串就可以看做乙個整數,唯一的要求是這些整數必須是正整數且它們的字串不能有前導零。現在問你怎樣對映字元才能使得這些字串表示的整數之和最大?

輸入描述:

每組測試用例僅包含一組資料,每組資料第一行為乙個正整數 n , 接下來有 n 行,每行乙個長度不超過 12 且僅包含大寫字母 a-j 的字串。 n 不大於 50,且至少存在乙個字元不是任何字串的首字母。

輸出描述:

輸出乙個數,表示最大和是多少。

輸入例子1:

2

abcbca

輸出例子1:

1875
如題所示:可以根據權值大小來賦予字母的值,例如在這題中:

abc=100×a+10×b+c

bca=100×b+10×c+a

則abc+bca=110×b+101×a+11×c(根據權值從大到小排序)。

要使和最大,那麼權值大的,對應的值就應該越大,b為9, a為8,c為7,可算得結果為:1875。

根據以上方法,可以用乙個陣列儲存對應的權值,進行簡單排序,然後根據排序的大小,進行賦值求結果;注意,題目中還要求不能有前導零,我們可以設定乙個標識,當每項的第一位,就將其標識為1,表示這是不能為零;當它為陣列的最小時,則要將其與前面可以為0的交換位置,例如:

a 100 1

j 11 1

c 10 0

d 9 0

e 8 1

b 7 0

g 6 0

h 5 1

i 4 1

f 3 1

此處的f的標識位為1,表示其不能為0,則需要尋找其前面可以為0的項,很明顯g 6 0這項,標識位為0,將g 6 0放到末尾去,變成:(h 5 1 和 i 4 1 這兩項都標識位都為1,不能放在尾部)

a 100 1

j 11 1

c 10 0

d 9 0

e 8 1

b 7 0

h 5 1

i 4 1

f 3 1

g 6 0

ac**:

#include#includeusing namespace std;

struct weightint

wi[10];

int n;

bool compare(weightint a, weightint b) //以從小到大的方式排序

int main()

}sort(wi, wi+10, compare);

if(wi[0].flag == 1)

long sum = 0;

for(int i = 9; i >= 0; i--)

cout << sum << endl;

return 0;

}

位元組跳動2017後端工程師實習生筆試題分析及答案

1.有 n 個字串,每個字串都是由 a j 的大寫字元構成。現在你將每個字元對映為乙個 0 9 的數字,不同字元對映為不同的數字。這樣每個字串就可以看做乙個整數,唯一的要求是這些整數必須是正整數且它們的字串不能有前導零。現在問你怎樣對映字元才能使得這些字串表示的整數之和最大?我的答案只通過了20 不...

位元組跳動2017客戶端工程師實習生筆試題 第四題

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 給定 x,k 求滿足 x y x y 的第 k 小的正整數 y 是二進位制的或 or 運算,例如 3 5 7。比如當 x 5,k 1時返回 2,因為5 1 6 不等於 5 1 5,而 5 2 7 等於 5 2 7。每組測...

位元組跳動2017後端實習生程式設計題

題目 木棒拼圖 題目 魔法權值 題目 或與加 有 n 個字串,每個字串都是由 a j 的大寫字元構成。現在你將每個字元對映為乙個 0 9 的數字,不同字元對映為不同的數字。這樣每個字串就可以看做乙個整數,唯一的要求是這些整數必須是正整數且它們的字串不能有前導零。現在問你怎樣對映字元才能使得這些字串表...