2016-11-23 80 views
1

这里是链接的沙漏问题的定义: https://www.hackerrank.com/challenges/30-2d-arrays无法获得准确的结果沙漏算法

我写了下面的程序:

package day11; 

import java.util.Scanner; 

public class Solution { 

    public static void main(String ... args){ 

     Scanner scan = new Scanner(System.in); 

     int[][] arr = new int[6][6]; 

     int maxHourGlassValue = 0; 
     int temp = 0; 
     int currMax = 0; 

     int k = 0, l = 0; 

     for(int i = 0 ; i < 6 ; i++){ 
      for(int j = 0 ; j < 6 ; j++){ 
       arr[i][j] = scan.nextInt(); 
      } 
     } 

     for(int i = 1 ; i < 5 ; i++){ 
      for(int j = 1 ; j < 5 ; j++){ 
        if(maxHourGlassValue < currMax){ 
        maxHourGlassValue = currMax; 
       } 
      } 


     } 

     System.out.println(maxHourGlassValue); 

    } 

} 

我只能跑6出8给出测试用例。什么可能会出错?

+2

*什么可能会出错?*很多。人们总是编码错误。这就是调试是整个学术研究领域的原因。 –

+0

到目前为止您还没有编写任何逻辑。它甚至没有运行示例测试用例,那么它将如何运行,满足8个。无论如何,我已经为您的沙漏问题回答了一个完整的测试代码。 –

回答

1

试试这个代码,我没有写代码,我只是将它复制并从here

import java.util.Scanner; 
public class Test { 

    public static void main(String ... args){ 
     Scanner scan = new Scanner(System.in); 
     int size = 6; 
     int[][] m = new int[size][size]; 

     //numbers input 
     for(int i=0; i<size; i++) 
     { 
      for(int j=0; j<size; j++) 
      { 
      m[i][j] = scan.nextInt(); 
      } 
     } 

     int temp = 0, MaxSum = -99999; 

     for (int i=0; i<size; ++i) { 
      for (int j=0; j<size; ++j) { 
       if (j+2 < size && i+2 < size) { 
        temp = m[i][j] + m[i][j+1] + m[i][j+2] + m[i+1][j+1] + m[i+2][j] + m[i+2][j+1] + m[i+2][j+2]; 
        if (temp >= MaxSum) { 
         MaxSum = temp; 
        } 
       } 
      } 
     } 
     System.out.println(MaxSum); 

    } 

} 
+0

如果你可以提供一些描述,那会更好。你可以把'temp> MaxSum'条件放在'for'循环里'if'里,而不是'temp> = MaxSum'。 –

0

修改了它下面是一个将成功运行的hourglass problem的所有测试用例的代码。

public static void main(String[] args) { 
    try (Scanner scan = new Scanner(System.in)) { 
     int[][] arr = new int[6][6]; 

     int maxHourGlassValue = -63;//Assigning (-9*7=)-63 which is the minimum possible value of "hourglass sum". 

     //Reading inputs. 
     for (int i = 0; i < 6; i++) { 
      for (int j = 0; j < 6; j++) { 
       arr[i][j] = scan.nextInt(); 
      } 
     } 

     //Logic. 
     /** 
     * Index of both i and j will run from 1 to 4 (one less than n-1 where n = 6) 
     * So for each i and j iteration calculating the sum of hourglass. 
     */ 
     int iHGValueTemp = 0; 
     for (int i = 1; i < 5; i++) { 
      for (int j = 1; j < 5; j++) { 
       iHGValueTemp = arr[i][j] + /*Main element*/ 
         arr[i - 1][j - 1] + arr[i - 1][j] + arr[i - 1][j + 1]+ /*Top three elements of main element.*/ 
         arr[i + 1][j - 1] + arr[i + 1][j] + arr[i + 1][j + 1]; /*Bottom three elements of main element.*/ 
       if (iHGValueTemp > maxHourGlassValue) { 
        maxHourGlassValue = iHGValueTemp; 
       } 
      } 

     } 

     //Output. 
     System.out.println(maxHourGlassValue); 
    } 
} 

我在评论中的代码中只写了描述。如果有任何疑问,请参考并与我讨论。