回上方

(11)數字連乘

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

在上面20*20方陣中,包含橫列、縱列、對角線左斜列、右斜列,四個方向,任何連續四個數字相乘,例如紅字的四個數相乘26 × 63 × 78 × 14 結果是1788696。

【最後目標】

尋找這樣的連續四個數,求相乘最大的結果。

下載檔案

練習1:從檔案讀取數字串,求橫列連續四個數字相乘最大值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# -*- coding: UTF-8 -*-
numbers = []

# 打開檔案
file = open("d:/numbers2.txt", "r")

# 讀取檔案
for line in file.readlines():    #依序讀取每行
    line = line.strip()    #去掉每行頭尾空白
    number_list = []
    for number in line.split():
        number_list.append(int(number))
    numbers.append(number_list)

# 關閉檔案
file.close()

print(numbers)
max = 0
for i in range(0, 20):
    for j in range(0, 17):
        mul = numbers[i][j]*numbers[i][j+1]*numbers[i][j+2]*numbers[i][j+3]
        if max < mul:
            max = mul
print(max)

練習2:求對角線數字乘積。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
numbers = [[ 8,  2, 22, 97, 67, 10],
           [81, 49, 31, 73, 49, 20],
           [71, 40, 67, 53, 30, 29],
           [17, 54, 24, 36, 16, 54],
           [ 1, 70, 54, 71, 83, 51],
           [33, 48, 61, 43, 52,  1]]

for i in range(2):
    for j in range(2):
        mul = numbers[i][j] * numbers[i+1][j+1] * numbers [i+2][j+2] * numbers [i+3][j+3]
        print(mul)

本單元課程自2018.4.23日起已被瀏覽 78