Bien que ce sera bizarre de voir cette question mais je vraiment besoin de comprendre certains concepts de base pendant que je continue mon voyage de codage. J'ai un problème qui est sur HackerRank il va comme: DIVISIBLES SUM PAIRS
Je vais de toute façon donner ici l'énoncé du problème:
Problématique
Étant donné un tableau, où nous devons trouver le nombre de paires divisible par le nombre donné k , et il y a encore une condition, ce qui est: l'arr [i] <arr [j] de ces paires.
Exemple
Par exemple, ar=[1,2,3,4,5,6]
et k=5
. Sont nos trois paires répondant aux critères [1,4] [2,3]
et [4,6]
.
Code
Avant de publier mon code, je voudrais vous dire que mon code a passé tous les cas de test, et il est accepté à aller de l'avant pour le prochain défi, mais il y a un petit problème que je suis en train de comprendre, ce qui est il dans le code.
static int divisibleSumPairs(int n, int k, int[] ar) {
int count = 0;
for(int i=0; i<ar.length; i++){
for(int j=i+1; j<ar.length; j++){
if(((ar[i]+ar[j])%k)==0){
if(i < j)
count++;
}
}
}
return count;
}
Ici , quand je le fais if(i < j) count++
, il me donne le résultat correct, mais dès que je fais cela if(ar[i] < a[j]) count++
, il me donne soi - disant une mauvaise réponse.
Aider quelqu'un peut me dégager ceci, comme ce qui reste. Comme je sais que le chèque arr[i] < arr[j]
doit donner le bon résultat. Je ne veux pas procéder à la mauvaise connaissance.
EDITS
Depuis que je l' ai compris ce que je faisais mal. Et j'ai une des modifications dans mon code qui ne démarrent pas la boucle intérieure avec 1 , car il commencera avec 1 chaque fois que la boucle se termine interne, et fonctionne à nouveau. Je remercie tous ceux qui m'a aidé à effacer cela et faire mes concepts assez forts pour traiter des questions comme celle - ci.
Je remercie personnellement Mike « Pomax » Kamermans , Ricola et xerx593 pour éclaircir mes doutes et me donner les concepts de base de boucle à travers les éléments. Cela me aidera à l' avenir, et je ne vais pas répéter cette chose à nouveau. :)
Je viens de vérifier votre lien et la condition donnée dans l'énoncé de la question est
Trouvez et imprimer le nombre de paires (i, j) où i <j et ar [i] + ar [j] est divisible par k.
Ce qui est tout simplement le nombre de paires non ordonnées d'éléments dont la somme est divisible par k.
Cependant vous avez écrit
il y a une autre condition à elle, qui est: l' arr [i] <arr [j] à partir de ces paires.
Je semble que vous avez mal lu la question. Et il explique pourquoi l' i<j
état fonctionne alors arr[i] < arr[j]
ne fonctionne pas.
Maintenant que vous savez que vous avez seulement besoin des paires non ordonnées, pas besoin d'itérer j
de 1
la ar.length
. Puisque vous avez besoin j > i
, tous j
entre 1
et i
( y compris) est inutile. Vous pouvez simplifier votre code:
static int divisibleSumPairs(int n, int k, int[] ar) {
int count = 0;
for(int i=0; i<ar.length-1; i++){
for(int j=i+1; j<ar.length; j++){
if(((ar[i]+ar[j])%k)==0){
count++;
}
}
}
return count;
}