Divisibles Somme paires

Alok:

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. :)

Ricola:

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 jde 1la ar.length. Puisque vous avez besoin j > i, tous jentre 1et 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;
}

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=222228&siteId=1
conseillé
Classement