1
我正在處理Project Euler問題11: 在下面的20×20網格中,沿對角線的四個數字已標記爲紅色。從.txt文件讀取數據並將數據導入到2D數組列表
(我不包括數字只是讓我的問題是更易於理解。如果你想引用它,鏈接https://projecteuler.net/problem=11)
這些數字的乘積是26×63×78× 14 = 1788696.
什麼是20×20網格中相同方向(上,下,左,右或對角線)上四個相鄰數字的最大乘積?
我的問題是,我想輸入這個數據到2D數組列表,但我不確定如何。這是我迄今爲止的代碼。我知道解決這個問題可能並不是一種很好的方式,但我仍然在學習,正如你可以清楚地看到的那樣,所以在這一點上並不關心如何改進代碼並使其更簡單或更短。我所需要的只是知道如何將它存儲爲2D數組列表,然後我相信我應該很好走。
import java.util.Scanner;
import java.io.File;
import java.util.ArrayList;
@SuppressWarnings("unchecked")
public class main{
public static int row(ArrayList data){
int product=1;//product of any four numbers in sequence across
int max=0;//max product going across
int item;//sets value of data
int y=0;//counts position of data (1-4)
int rownum;//number row
int column;//number column
Object num;//used to extract data from arraylist before converting into int
for(column=0;column<16;column++){
while(y<4){
item=x+y;
num=data.get(item);
product*=(Integer) num;
if (product>max){
max=product;
}
y++;
}
product=1;
y=0;
}
return max;
}
public static void main(String[] args){
File path=new File("../numbers.txt");
int word;//represents number column
int max;//max product of any four numbers in order
int product=1;//max product of each individual way (across, down, diagonal)
int line;//each individual number
ArrayList data=new ArrayList();
try{
Scanner in=new Scanner(path);
while (in.hasNextLine()){
for(word=0;word<16;word++){//goes across a row
line=in.nextInt();
data.add(line);//adds file to arraylist
}
}
}
catch(Exception ex){
}
max=row(data);
System.out.println(max);
}
感謝您的幫助。