Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme code Java

Sujet résolu
    21 janvier 2018 à 1:04:23

    Bonjour a tous,

    Je doit effectuer un problême d'algo que j'effectue pour le plaisir sur le site IOI, mon programme compile nickel sur mon ide mais sur leur site il me dit au dernier test effectuer que mon programme est soit trop lent ou dans une boucle infinie. 

    Voici la consigne : 

    En étudiant différents types de textes (romans, lois, article de journaux…), on se rend compte que non seulement les mots utilisés ne sont pas les mêmes mais aussi que leurs longueurs sont statistiquement différentes : par exemple, il est beaucoup plus fréquent de trouver de longs mots complexes dans un article de loi que dans un livre pour enfants.

    Afin d’essayer de déterminer automatiquement à quelle catégorie appartient un livre, on souhaite déterminer le nombre de mots de 1 lettre, 2 lettres, 3 lettres… qu’il contient.

    Contraintes

    Le texte contient un ensemble de mots, séparés par des espaces, sans aucun signe de ponctuation.

    Chaque mot contient au plus 100 caractères.

    Entrée

    La première ligne contient deux entiers : nbLignes et nbMots.

    Chacune des nbLignes lignes suivantes contient nbMots mots.

    Sortie

    Pour chaque longueur de mot possible, et uniquement s’il y avait des mots de cette longueur dans le texte, vous devez afficher sur une ligne la longueur et le nombre de mots de cette longueur, séparés par un deux-points (il faut mettre un espace de chaque côté du deux-points).

    Je joint mon code également, je ne souhaite pas la réponse mais seulement qu'on puisse m'aiguiller.

    Merci.

    import java.util.Scanner;
    
    class Main{
    
       public static void main(String...args){
       
          Scanner sc = new Scanner(System.in);
          
            int nbLignes = sc.nextInt();
            int nbMots = sc.nextInt();
            sc.nextLine();   
            String mot;
            int max = 0 ;
            int [] tab = new int [101];
            
                    
     for(int indexLigne=0; indexLigne<nbLignes; indexLigne++){
            
               
       for(int indexMot=0; indexMot<nbMots; indexMot++){
                
                mot = sc.next();
                  
                  
               tab[mot.length()] = tab[mot.length()] + 1;
               if((mot.length()>max) && (mot.length()<101)){
                      max = mot.length();    
                  }
     
               }
            }
            
             for(int i=0; i<max+1; i++){
                if(tab[i]!=0) {
                   System.out.println(i +" : "+tab[i]);
                }
            }  
        }
    }
    • Partager sur Facebook
    • Partager sur Twitter
    Matt
      21 janvier 2018 à 7:34:48

      Bonjour,

      Afficher les résultats ligne par ligne est lent s'il y en a beaucoup. Essaye de construire ton résultat en regroupant toutes les lignes avec un StringBuilder et de l'afficher avec un unique println.

      -
      Edité par brubru777 21 janvier 2018 à 7:36:17

      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2018 à 10:12:07

        C'était effectivement un beug sur leur site, mais pour le coup dans mon malheur, j'ai appris a utiliser

        "StringBuilder" lol.

        Merci encore.

        Matt.

        import java.util.Scanner;
        
        class Main{
        
           public static void main(String...args){
           
              Scanner sc = new Scanner(System.in);
              
                int nbLignes = sc.nextInt();
                int nbMots = sc.nextInt();
                sc.nextLine();   
                String mot;
                int max = 0 ;
                int [] tab = new int [101];
                
                        
                for(int indexLigne=0; indexLigne<nbLignes; indexLigne++){
                
                   
                   for(int indexMot=0; indexMot<nbMots; indexMot++){
                    
                      mot = sc.next();
                      tab[mot.length()] = tab[mot.length()] + 1;
                      
                      if((mot.length()>max) && (mot.length()<101)){
                          max = mot.length();    
                      }
         
                   }
                }
                
                  for(int i=0; i<max+1; i++){
                     int longueur = tab[i];
                     StringBuilder sb = new StringBuilder(longueur);
                     sb.append(i+" : ").append(longueur);
                     String res = sb.toString();
                       if(tab[i]!=0) {
                          System.out.println(res);
                    }
                }  
            }
        }

        -
        Edité par Matttinkiete 21 janvier 2018 à 11:56:25

        • Partager sur Facebook
        • Partager sur Twitter
        Matt

        Probleme code Java

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown