天天看點

2019-07-23——網易遊戲2019年春招測試部分程式設計題第一題

題目:

現在你需要用一台奇怪的打字機書寫一封書信。信的每行隻能容納寬度為100的字元,也就是說如果寫下某個字元會導緻行寬超過100,那麼就要另起一行書寫

信的内容由a-z的26個小寫字母構成,而每個字母的寬度均會事先約定。例如字元寬度約定為[1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],那麼就代表'a'到'd'四個字母的寬度分别是1,2,3,4,而'e'到'z'的寬度均為5

那麼按照上述規則将給定内容S書寫成一封信後,這封信共有幾行?最後一行寬度是多少?

輸入示例:

5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
helloworld
           

輸出示例:

1 50
           

 解釋:

"5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5"規定每個字元寬度為5

"helloworld"是輸入的字元串S

由于S共包含10個字元,也即共占用50個字元寬度,是以可以寫在同一行

代碼:

length = list(map(int, input().split(' ')))
string = list(input())
word = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
        'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
word_map = dict(zip(word, length))
# 每行長度計數
line_sum = 0
# 行數
line_num = 1
for item in string:
    # 如果需要換行
    if line_sum + word_map[item] > 100:
        line_num += 1
        line_sum = 0
    line_sum += word_map[item]
print(line_num, line_sum)