尤拉計畫 17

2021-07-25 12:46:49 字數 2089 閱讀 8999

如果用英文寫出數字1到5: one, two, three, four, five, 那麼一共需要3 + 3 + 5 + 4 + 4 = 19個字母。

如果數字1到1000(包含1000)用英文寫出,那麼一共需要多少個字母?

注意: 空格和連字元不算在內。例如,

342 (three hundred and forty-two)包含23個字母;

115 (one hundred and fifteen)包含20個字母。

「and」 的使用與英國標準一致。

# 分類求解1

all_text = open('euler17.txt').read()

all_text = all_text.splitlines()

arr_dict =

for line in all_text:

num, english = line.split(' ')

arr_dict[int(num)] = len(english)

len_1_9 = sum([arr_dict[i] for i in range(1, 10)])

len_10_19 = sum([arr_dict[i] for i in range(10, 20)])

len_20_99 = sum([arr_dict[i] * 10

for i in range(20, 100, 10)]) + len_1_9 * 8

len_100_999 = len_1_9 * 100 + \

arr_dict[100] * 900 + arr_dict['and'] * (900 - 9) + (len_1_9 + len_10_19 + len_20_99) * 9

len_1000 = arr_dict[1000] + arr_dict[1]

print(len_1_9 + len_10_19 + len_20_99 + len_100_999 + len_1000)

# 分類求解2

len_all = 0

for i in range(1, 1000):

if i < 20:

len_all += arr_dict[i]

elif i < 100:

n_1 = i % 10

n_2 = i - n_1

len_all += arr_dict[n_1] + arr_dict[n_2]

elif i < 1000:

n_1 = i % 10

n_2 = i // 10 % 10 * 10

n_3 = i // 100

len_all += arr_dict[n_3] + arr_dict[100]

if n_2 != 0

or n_1 != 0:

len_all += arr_dict['and']

if n_2 < 20:

len_all += arr_dict[n_2 + n_1]

else:

len_all += arr_dict[n_2] + arr_dict[n_1]

print(len_all + len_1000)

txt內容

1

one2

two3

three

4four

5five

6six

7seven

8eight

9nine

10ten

11 eleven

12 twelve

13 thirteen

14 fourteen

15 fifteen

16 sixteen

17 seventeen

18 eighteen

19 nineteen

20 twenty

30 thirty

40 forty

50 fifty

60 sixty

70 seventy

80 eighty

90 ninety

100 hundred

1000 thousand

尤拉計畫 6

前十個自然數的平方和是 1 2 2 2 10 2 385 前十個自然數的和的平方是 1 2 10 2 552 3025 所以平方和與和的平方的差是3025 385 2640.找出前一百個自然數的平方和與和平方的差。def get square sub x 遞迴,展開行列式 if x 1 return...

尤拉計畫 14

以下迭代序列定義在整數集合上 n n 2 當n是偶數時 n 3n 1 當n是奇數時 應用以上規則,並且以數字13開始,我們得到以下序列 13 40 20 10 5 16 8 4 2 1 可以看出這個以13開始以1結束的序列包含10個項。雖然還沒有被證明 collatz問題 但是人們認為在這個規則下,...

尤拉計畫 15

從乙個2 2網格的左上角開始,有6條 不允許往回走 通往右下角的路。對於20 20的網格,這樣的路有多少條?def get load num x,y x,y 網格的路數等於 x 1,y x,y 1 if x 0 or y 0 return 1return get xy load x 1,y get ...