Java - Comment faire pour Résoudre ce Tableau 2D Heure de Verre?
Je suis en train de travailler sur un problème où j'ai imprimer la somme la plus importante parmi tous les sabliers dans le tableau. Vous pouvez trouver les détails sur le problème ici-
Ce que j'ai essayé:
public class Solution {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int arr[][] = new int[6][6];
for (int arr_i = 0; arr_i < 6; arr_i++) {
for (int arr_j = 0; arr_j < 6; arr_j++) {
arr[arr_i][arr_j] = in.nextInt();
}
}
int sum = 0;
int tmp_sum = 0;
for (int arr_i = 0; arr_i < 4; arr_i++) {
for (int arr_j = 0; arr_j < 4; arr_j++) {
if (arr[arr_i][arr_j] > 0) {
sum = sum + (arr[arr_i][arr_j]) + (arr[arr_i][arr_j + 1]) + (arr[arr_i][arr_j + 2]);
sum = sum + (arr[arr_i + 1][arr_j + 1]);
sum = sum + (arr[arr_i + 2][arr_j]) + (arr[arr_i + 2][arr_j + 1]) + (arr[arr_i + 2][arr_j + 2]);
if (tmp_sum < sum) {
tmp_sum = sum;
}
sum = 0;
}
}
}
System.out.println(tmp_sum);
}
}
D'entrée:
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0
De sortie:
12
Résultat Attendu:
13
Capture d'écran:
Je ne sais pas où je fais mal. Je ne comprends pas pourquoi la sortie attendue est 13
. Selon la description donnée dans le problème, il devrait être 10
. Est-ce une mauvaise question ou ma compréhension à propos de ce qui est mal?
Vous devez vous connecter pour publier un commentaire.
Supprimer la
if (arr[arr_i][arr_j] > 0)
déclaration. Il empêche de trouver la réponse à la ligne 1, colonne 0, parce que la cellule est0
.Commentaires pour d'autres améliorations à votre code:
Que si le meilleur sablier somme est
-4
? Vous devez les initialisertmp_sum
àInteger.MIN_VALUE
. Et le nom qu'ilmaxSum
, afin de mieux décrire son but.Vous ne devriez pas définir
sum
en dehors de la boucle. Déclarer lorsqu'il est affecté pour la première fois, alors vous n'avez pas à le remettre à0
par la suite.Votre itérateurs doit être juste
i
etj
. Ceux sont des noms standard pour l'entier des itérateurs, et continue de code ... cleaner.Si vous préférez des noms plus longs, utilisez
row
etcol
, puisque c'est ce qu'ils représentent.Vous n'avez pas besoin de parenthèses autour de la matrice de recherches.
Pour plus de clarté, j'ai formaté le code ci-dessous pour montrer la forme de sablier dans le tableau des recherches.
<4
signifie valeur max est3
, et sablier va jusqu'à+2
si max est5
, qui se trouve être le max d'index dans le tableau de taille6
. Ne sais pas ce que tu veux dire par "la taille du tableau n'a pas été spécifié", puisque vous ne pouvez pas allouer un tableau sans donner une taille.C'était ma solution. J'ai enveloppé d'une instruction si le code qui calcule la somme, qui fait que nous ne sors pas de limites.
if (i + 2 < 6 && j + 2 < 6)
... L'itération le long je ne peux avoir 4 3by3 tableaux. À la fois votre "for(int j=0; j < 6; j++)" etfor(int i=0; i < 6; i++)
. déclarations de fin 4. j'.e ` for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; j++) {`Voici la simple et facile à comprendre, C# code équivalent pour votre sablier problème.
Heureux De Codage.
Merci,
Ankit Bajpai
Vous pouvez essayer ce code:
Je pense que ce sera facile à comprendre pour les débutants.
Ici est une autre option facile, espérons que cela aide:
il y a un autre opetion en cas de signe -(moins) et de sortie zéro, nous pouvons utiliser un court-circuit ser Treeset pour la même chose . ci-dessous est la sameple code
Résolu en PHP, peut être utile.
Passe tous les cas de test
JS:
Ici vous allez..