Problem 11 of What is the greatest product of four adjacent numbers

本文探讨了一个20x20数字网格中四个相邻数的最大乘积问题,这些数可以沿任何方向(水平、垂直或对角线)排列。通过编程方法解决了这一挑战,并给出了最大乘积的具体数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 any direction (up, down, left, right, or diagonally) in the 20×20 grid?


public class GridProduct {
	public static void main(String args[]){
		int [][] a={
				{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
				{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,8,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,9,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,9,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,8,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,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,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},
		};
		int mul1=1,mul2=1,mul3=1,mul4=1;
		//down
		for(int i=0;i<20;i++){
			for(int j=0;j<17;j++){
				int pro1=a[i][j]*a[i][j+1]*a[i][j+2]*a[i][j+3];
				if(mul1<pro1){
					mul1=pro1;
				}
			}
		}
		//left
		for(int i=0;i<17;i++){
			for(int j=0;j<20;j++){
				int pro2=a[i][j]*a[i+1][j]*a[i+2][j]*a[i+3][j];
				if(mul2<pro2){
					mul2=pro2;
				}
			}
		}
		//diagonally right
		for(int i=0;i<17;i++){
			for(int j=0;j<17;j++){
				int pro3=a[i][j]*a[i+1][j+1]*a[i+2][j+2]*a[i+3][j+3];
				if(mul3<pro3){
					mul3=pro3;
				}
			}
		}
		//diagonally left
		for(int i=19;i>=3;i--){
			for(int j=0;j<17;j++){
				int pro4=a[i][j]*a[i-1][j+1]*a[i-2][j+2]*a[i-3][j+3];
				if(mul4<pro4){
					mul4=pro4;
				}
			}
		}
		
		System.out.println("mul1="+mul1+",mul2="+mul2+",mul3="+mul3+",mul4="+mul4);
	}
}

Answer:
70600674




import java.util.HashMap;

public class Recss {

	static HashMap<Integer, String> horHashmap=new HashMap<Integer, String>();
	public static int horizental(int [][] array){
		int result=0;
		for(int m=0;m<20;m++){
			for(int n=0;n<17;n++){
				
					int temp=array[m][n]*array[m][n+1]*array[m][n+2]*array[m][n+3];
					if(temp>result){
						horHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m][n+1])+","+String.valueOf(array[m][n+2])+","+String.valueOf(array[m][n+3]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	
	static HashMap<Integer, String> verHashmap=new HashMap<Integer, String>();
	public static int vertal(int [][] array){
		int result=0;
		for(int m=0;m<17;m++){
			for(int n=0;n<20;n++){
					int temp=array[m][n]*array[m+1][n]*array[m+2][n]*array[m+3][n];
					if(temp>result){
						verHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n])+","+String.valueOf(array[m+2][n])+","+String.valueOf(array[m+3][n]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	static HashMap<Integer, String> xieHashmap=new HashMap<Integer, String>();
	public static int xie(int [][] array){
		int result=0;
		for(int m=0;m<17;m++){
			for(int n=0;n<17;n++){
					int temp=array[m][n]*array[m+1][n+1]*array[m+2][n+2]*array[m+3][n+3];
					if(temp>result){
						xieHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m+1][n+2])+","+String.valueOf(array[m+2][n+3])+","+String.valueOf(array[m+3][n+4]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	static HashMap<Integer, String> fanxiangHashmap=new HashMap<Integer, String>();
	public static int fanxiang(int [][] array){
		int result=0;
		for(int m=19;m>2;m--){
			for(int n=0;n<17;n++){
					int temp=array[m][n]*array[m-1][n+1]*array[m-2][n+2]*array[m-3][n+3];
					if(temp>result){
						fanxiangHashmap.put(temp,String.valueOf(array[m][n])+","+String.valueOf(array[m-1][n+1])+","+String.valueOf(array[m-2][n+2])+","+String.valueOf(array[m-3][n+3]));
						result=temp;
					
				}
			}
		}
		return result;
	}
	public static void main(String[] args) {
		int [][] array={{8,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,8},
						{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,8,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,9,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,9,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,8,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,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,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}};
		Recss rec=new Recss();
		System.out.println(horizental(array));
		System.out.println(horHashmap.get(horizental(array)));
		System.out.println(vertal(array));
		System.out.println(verHashmap.get(vertal(array)));
		System.out.println(xie(array));
		System.out.println(xieHashmap.get(xie(array)));
		System.out.println(fanxiang(array));
		System.out.println(fanxiangHashmap.get(fanxiang(array)));
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值