2017-10-18 4 views
-1

Le nouveau film "Avengers" vient de sortir! Il y a beaucoup de gens au box-office du cinéma debout dans une énorme ligne. Chacun d'entre eux a un seul billet de 100, 50 ou 25 dollars. Un billet "Avengers" coûte 25 dollars.impossible de passer les cas de test dans codewar

Vasya travaille actuellement comme employé. Il veut vendre un billet à chaque personne de cette ligne. Est-ce que Vasya peut vendre un billet à chaque personne et donner le changement s'il n'a pas d'argent au début et vend les billets strictement dans l'ordre que les gens suivent dans la file?

Retour OUI, si Vasya peut vendre un billet à chaque personne et donner le changement. Sinon, renvoyez NO.

Par exemple. J'ai pu passer 10 tests sur 11 mais pour 1 test, cela montre que mon résultat est faux.

Say, entrée =>Line.Tickets(new int[] {25,50,25,100}) la sortie de mon code =

NO

Si la première personne a 25 Bill- $> count25 = 1 et count50 = 0, si la deuxième personne a 50 dollars bill-> count50 = 1 et count25 = 0, si la troisième personne a 25 $ bill-> count50 = 1 et count25 = 1, si la quatrième personne a 100 $ bill-> count50 = 0 et count25 = 0

public class Line { 
    public static String Tickets(int[] peopleInLine) { 
     int count25 = 0; 
     int count50 = 0; 
     for (int i = 0; i < peopleInLine.length; i++) { 
      if (peopleInLine[i] == 100) { 
       if (count25 == 1 && count50 > 0) { 
        count25 = count25 - 1; 
        count50 = count50 - 1; 
       } 

       if (count25 >= 3) { 
        count25 = count25 - 3; 
       } else { 
        return "NO"; 
       } 
      } 

      if (peopleInLine[i] == 25) { 
       count25 = count25 + 1; 
      } 

      if (peopleInLine[i] == 50) { 
       count50 = count50 + 1; 
       count25 = count25 - 1; 
       if (count25 < 0) { 
        return "NO"; 
       } 
      } 
     } 
     return "YES"; 
    } 
} 
+0

Que faire si vous demandez à quelqu'un avec la facture de 100 dollars et vous avez 2 25s et un 50? Vous devriez être capable de lui donner le changement mais je ne vois pas une option pour ceci. – JackVanier

+0

Eh bien, quelles sont les valeurs des variables critiques lorsque vous émettez la réponse ** NON **? Je ne vois aucune tentative de déboguer cela. – Prune

+0

@JackVanier, j'ai fait une erreur dans le code – CryBaby

Répondre

0

La seconde instruction if dans le ticket de 100 dollars (if(count25>=3)) ne doit pas être évaluée si la première instruction if (if(count25==1&&count50>0)) est évaluée à true.

Utilisez else if pour la deuxième condition:

if (peopleInLine[i] == 100) { 
    if(count25 == 1 && count50 > 0) { 
     count25--; 
     count50--; 
    } else if (count25 >= 3) { 
     count25-=3; 
    } else { 
     return "NO"; 
    } 
}