R语言学习——欧拉计划(11)Largest product in a grid

Problem 11

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?

这些数字的乘积是26×63×78×14 = 1788696。

在20×20网格中,相同方向(上,下,左,右或对角)的四个相邻数字的最大乘积是多少?

f<-function(){
  N<-20
  grid<-matrix(c(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),20,20,byrow=TRUE)
  print(grid)
  m<-0
  for (i in 1:16){
    #print(i)
    for(j in 1:16){
      #print(j)
      #print(grid[i,j])
      h<-grid[i,j] * grid[i,j+1] * grid[i,j+2] * grid[i,j+3] #行
      #print(h)
      v<-grid[j,i] * grid[j+1,i] * grid[j+2,i] * grid[j+3,i] #列
      #print(v)
      d1<-grid[i,j] * grid[i+1,j+1] * grid[i+2,j+2] * grid[i+3,j+3] #右下斜
      #print(d1)
      d2<-grid[i,N-j-1] * grid[i+1,N-j-2] * grid[i+2,N-j-3] * grid[i+3,N-j-4] #左下斜
      #print(d2)
      m<-max(m, max(h, max(v, max(d1, d2))))
    }
  }
  print(m)
}
Answer: 70600674
Completed on Fri, 28 Sep 2018, 17:41

原文地址:https://www.cnblogs.com/caiyishuai/p/9721655.html

时间: 2024-10-08 15:15:24

R语言学习——欧拉计划(11)Largest product in a grid的相关文章

Project Euler:Problem 11 Largest product in a grid

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

用欧拉计划学Rust语言(第17~21题)

最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,所以先补一下Rust的基础知识.学习了一段时间,发现Rust的学习曲线非常陡峭,不过仍有快速入门的办法. 学习任何一项技能最怕没有反馈,尤其是学英语.学编程的时候,一定要"用",学习编程时有一个非常有用的网站,它就是"欧拉计划",网址: https://projecteuler.net 这个网站提供了几百道由易到难的数学问题,你可以用任何办法去解决它,当然主要还得靠编程,编程语言不限,论坛里已经有

刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?

我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以又开始了Rust的快速入门学习. 欧拉计划 看了一下网上有关Rust的介绍,都说它的学习曲线相当陡峭,曾一度被其吓着,后来发现Rust借鉴了Haskell等函数式编程语言的优点,而我以前专门学习过Haskell,经过一段时间的入门学习,我现在已经喜欢

通过欧拉计划学Rust编程(第54题)

由于研究Libra等数字货币编程技术的需要,学习了一段时间的Rust编程,一不小心刷题上瘾. 刷完欧拉计划中的63道基础题,能学会Rust编程吗? "欧拉计划"的网址: https://projecteuler.net 英文如果不过关,可以到中文翻译的网站: http://pe-cn.github.io/ 这个网站提供了几百道由易到难的数学问题,你可以用任何办法去解决它,当然主要还得靠编程,编程语言不限,论坛里已经有Java.C#.Python.Lisp.Haskell等各种解法,当然

欧拉计划003. 最大素因子

Problem 3: Largest prime factor The prime factors of 13195 are 5, 7, 13 and 29. What is the largest prime factor of the number 600851475143 ? 求出最大素因子 我的python代码如下: num=600851475143 div=2 while div<=num: if num%div==0: num=num/div else: div=div+1 prin

欧拉计划21-23题

21.Amicable numbers Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n). If d(a) = b and d(b) = a, where a  b, then a and b are an amicable pair and each of a and b are called amicable numbers. For

欧拉计划16-20题

16.Power digit sum 215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. What is the sum of the digits of the number 21000? 题目大意: 215 = 32768 并且其各位之和为 is 3 + 2 + 7 + 6 + 8 = 26. 21000 的各位数之和是多少? #include <stdio.h> #include <stdbool.h&g

通过欧拉计划学Rust(第1~6题)

最近想学习Libra数字货币的MOVE语言,发现它是用Rust编写的,看来想准确理解MOVE的机制,还需要对Rust有深刻的理解,所以开始了Rust的快速入门学习. 看了一下网上有关Rust的介绍,都说它的学习曲线相当陡峭,曾一度被其吓着,后来发现Rust借鉴了Haskell等函数式编程语言的优点,而我以前专门学习过Haskell,经过一段时间的入门学习,我现在已经喜欢上这门神奇的语言. 入门资料我用官方的<The Rust Programming Language>,非常权威,配合着<

欧拉计划013(ProjectEuler013):求出10个数乘积最大的

申明:之前的所有欧拉计划都是用python来写的,的确python来写,代码量极少,学习起来也很方便.但是最近为了找java工作,所以用Java来完成欧拉计划的题,来复习一下Java. Large sum Problem 13 Work out the first ten digits of the sum of the following one-hundred 50-digit numbers. 371072875339021027987979982208375902465101357402