Java进阶之欧拉工程 第十一篇【持续更新】
来源:互联网 发布:韩顺平java和java ee 编辑:程序博客网 时间:2024/06/08 11:29
原题如下:
In the 2020 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 2020 grid?
翻译:
在以上这个2020的网格中,四个处于同一对角线上的相邻数字用红色标了出来:
这四个数字的乘积是:26 63 78 14 = 1788696.
在这个2020网格中,处于任何方向上(上,下,左,右或者对角线)的四个相邻数字的乘积的最大值是多少?
解题思路:
这道题目算是比较有难度了,我的思路是以一个二维数组承载这些数字,然后从第一个开始遍历,遍历右边三个,下面三个,右下对角线,以及坐上对角线4次,这样就可以遍历到所有相连的四个数的乘积,然后取最大值,java代码如下:
public class Launcher { public static void main(String[] args) throws FileNotFoundException { int[][] intArray=new int[20][20]; long sum1=0L,sum2=0L,sum3=0L,sum4=0L; long max = 0L; BufferedReader readTxt=new BufferedReader(new FileReader(new File("X:/terribleNum.txt"))); try { String textLine=""; String str=""; while((textLine = readTxt.readLine())!=null){textLine+=" "; str+=""+textLine; }String[] numList=str.split(" ");for(int i=0;i<20;i++){ for(int j=0;j<20;j++){ intArray[i][j]=Integer.parseInt(numList[20*i+j]); System.out.println(intArray[i][j]); } }readTxt.close();} catch (IOException e){// TODO Auto-generated catch blocke.printStackTrace();} for(int i=0;i<20;i++){ for(int j=0;j<17;j++){ sum1 = intArray[i][j]*intArray[i][j+1]*intArray[i][j+2]*intArray[i][j+3]; max=max2(sum1,max); } } for(int i=0;i<17;i++){ for(int j=0;j<20;j++){ sum2=intArray[i][j]*intArray[i+1][j]*intArray[i+2][j]*intArray[i+3][j]; max=max2(sum2,max); } } for(int i=17;i<17;i++){ for(int j=0;j<17;j++){ sum3=intArray[i][j]*intArray[i+1][j+1]*intArray[i+2][j+2]*intArray[i+3][j+3]; max=max2(sum3,max); } } for(int i=0;i<17;i++){ for(int j=19;j>3;j--){ sum4=intArray[i][j]*intArray[i+1][j-1]*intArray[i+2][j-2]*intArray[i+3][j-3]; max=max2(sum4,max); } } System.out.println(max); } public static long max2(long a , long b){ if (a>b){ return a;} else{ return b; } }}
- Java进阶之欧拉工程 第十一篇【持续更新】
- Java进阶之欧拉工程 第十篇【持续更新】
- Java进阶之欧拉工程 第一篇【持续更新】
- Java进阶之欧拉工程 第二篇【持续更新】
- Java进阶之欧拉工程 第三篇【持续更新】
- Java进阶之欧拉工程 第四篇【持续更新】
- Java进阶之欧拉工程 第五篇【持续更新】
- Java进阶之欧拉工程 第六篇【持续更新】
- Java进阶之欧拉工程 第七篇【持续更新】
- Java进阶之欧拉工程 第八篇【持续更新】
- Java进阶之欧拉工程 第九篇【持续更新】
- Java进阶之欧拉工程 第十三篇【大数求和】
- Java进阶之欧拉工程 第十二篇【有大量约数的三角数】
- Java进阶之欧拉工程 第十四篇【 最长的collatz序列】
- Java进阶之欧拉工程 第十五篇【网格路径问题】
- Java进阶之欧拉工程 第十六篇【2的1000次方各位之和为多少】
- 第十一篇 常用方法总结,不计入数,持续更新
- 进阶之路,持续更新ing
- 重新编译无效数据库组件
- VC++ try catch
- 【黑马程序员】Java基础知识1
- A、B两个整数集合的交集
- UIBUTTON怎样可以实现icon在左边,文字在右边的效果
- Java进阶之欧拉工程 第十一篇【持续更新】
- 改变cocos2dx引擎速度
- 译:go’s block and identifiers scope
- mysql字符串替换
- UVA - 12294 RPG battles
- BeagleBone Black板第九课:测试读取ADC数据
- linux setsockopt函数的用法
- java操作office和pdf文件页面列表导出cvs,excel、pdf报表.
- Spring中@Autowired注解、@Resource注解的区别