本帖最后由 icymirror 于 2015-09-29 11:18 编辑
Problem 011:
In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
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
The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
问题11:
在下面的20*20的表格里,有四个对角线方向的标识成红色的数字。
(表格同上,略)
这四个数字的积是:26 * 63 * 78 * 14 = 1788686
试找出在这个20*20的表格中,在同一方向上(横、竖、斜)相邻的四个数字的乘积的最大值是多少。
代码:
- package main
- import (
- "fmt"
- )
- func Problem011(data [][]int, count int) int {
- var height int = len(data)
- if height < 1 {
- return 0
- }
-
- var width int = len(data[0])
- if (height < count || width < count) {
- return 0
- }
- maxProduct := 0
- // Check on horizental direction
- for index := 0; index < height; index++ {
- for subIndex := 0; subIndex < width - count; subIndex++ {
- currentProduct := 1
- for offset := 0; offset < count; offset++{
- currentProduct *= data[index][subIndex + offset]
- }
- if currentProduct > maxProduct {
- maxProduct = currentProduct
- }
- }
- }
-
- // Check on vertical direction
- for index := 0; index < width; index++ {
- for subIndex := 0; subIndex < height - count; subIndex++ {
- currentProduct := 1
- for offset := 0; offset < count; offset++ {
- currentProduct *= data[subIndex + offset][index]
- }
- if currentProduct > maxProduct {
- maxProduct = currentProduct
- }
- }
- }
-
- // Check on back slash direction
- for index := 0; index < width - count; index++ {
- for subIndex := 0; subIndex < height - count; subIndex++ {
- currentProduct := 1
- for offset := 0; offset < count; offset++ {
- currentProduct *= data[index + offset][subIndex + offset]
- }
- if currentProduct > maxProduct {
- maxProduct = currentProduct
- }
- }
- }
-
- // Check on slash direction
- for index := count; index < width; index++ {
- for subIndex := 0; subIndex < height - count; subIndex++ {
- currentProduct := 1
- for offset := 0; offset < count; offset++ {
- currentProduct *= data[subIndex + offset][index - offset]
- }
- if currentProduct > maxProduct {
- maxProduct = currentProduct
- }
- }
- }
- return maxProduct
- }
- func main() {
- data := [][] int {{8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8},
- {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0},
- {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65},
- {52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,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,3,45,2,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,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},
- {24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
- {21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95},
- {78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92},
- {16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57},
- {86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58},
- {19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40},
- {4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66},
- {88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69},
- {4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},
- {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16},
- {20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54},
- {1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48}}
- fmt.Println("Problem 011 result: ", Problem011(data, 4))
- }
复制代码 |