2016-11-23 3 views
1

Voici le lien pour la définition du problème de Hourglass: https://www.hackerrank.com/challenges/30-2d-arraysImpossible d'obtenir des résultats précis pour l'algorithme de Hourglass

j'ai écrit le programme suivant:

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); 

    } 

} 

Je ne pouvais courir 6 sur 8 cas de test donnés. Qu'est ce qui pourrait aller mal ????

+2

* Que pourrait-il y avoir de mal? * Lots. Les gens codent des erreurs tout le temps. C'est pourquoi le débogage est un domaine entier d'étude académique. –

+0

Vous n'avez encore écrit aucune logique. Il n'est même pas en cours d'exécution pour un exemple de test, alors comment cela va fonctionner pour 6 sur 8. De toute façon, j'ai répondu à un code complet testé pour votre problème de sablier. –

Répondre

1

Essayez ce code, je n'ai pas écrit ce code, je copie juste et modifié à partir 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

Il serait préférable que vous fournissiez également une description. Vous pouvez placer la condition 'temp> MaxSum' au lieu de' temp> = MaxSum' dans 'if' à l'intérieur de la boucle 'for'. –

0

Voici le code qui se déroulera avec succès pour tous les cas de test de 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); 
    } 
} 

J'ai une description écrite dans le code dans les commentaires seulement. S'il vous plaît se référer à cela et discuter avec moi en cas de doute.