SPOJ - flamaster. U mnie działa poprawnie ale nie przechodzi testu. Co może być źle?

0

Witam,
Sprawdzałem wiele różnych kombinacji danych wejściowych i u mnie jest wszystko ok. Zarówno przyjmowanie ilości testów, jak i podawanie danych i wyświetlanie wyników. Przewidziany limit czasowy to: 0.219s., a na spoju błąd wyskakuje z czasem 0.14s., czyli się mieszczę. SPOJ wyświetla mi jednak: Błędna odpowiedź.

import java.util.*;
import java.lang.*;
import java.util.Scanner;

class Main
{
	public static void main (String[] args) throws java.lang.Exception
	{
       int liczbaTestow;
       int  licznikLiter;
       String tekst, tekstSkrocony, licznikLiterString;
       Scanner scan = new Scanner(System.in);
       liczbaTestow = scan.nextInt();


        for(byte i = 1; i <= liczbaTestow; i++){
            tekst = scan.nextLine();
            tekstSkrocony = "";
            licznikLiter = 1;
            char zn = 0;
            
            for(int j = 0; j < tekst.length(); j++){
                
                if(zn == tekst.charAt(j)){
                    licznikLiter++;
                }
                else if(zn != tekst.charAt(j)){
                    if(licznikLiter == 1){
                        tekstSkrocony = tekstSkrocony + zn;
                    }
                    else if(licznikLiter == 2){
                        tekstSkrocony = tekstSkrocony + zn + zn;
                    }
                    else if(licznikLiter > 2){
                        licznikLiterString = Integer.toString(licznikLiter);
                        tekstSkrocony = tekstSkrocony + zn + licznikLiterString;
                    }
                    licznikLiter = 1;
                }
                zn = tekst.charAt(j);
            }
            if(licznikLiter == 1) tekstSkrocony = tekstSkrocony + zn;
            else if(licznikLiter == 2) tekstSkrocony = tekstSkrocony + zn + zn;
            else if(licznikLiter > 2){
                licznikLiterString = Integer.toString(licznikLiter);
                tekstSkrocony = tekstSkrocony + zn + licznikLiterString;
            } 
             System.out.println(tekstSkrocony);
        }
	}
}

1

Jesteś pewien, że wszystko jest ok?

Wynik programu to

 A10B16
 ABBC3D4E5FGGHIIJK3L

Przed końcowym outputem masz spację. Pochodzi ona z tej linii:

if(licznikLiter == 1){
      tekstSkrocony = tekstSkrocony + zn;
}
0

Poprawiłem, ale nadal jest jakiś błąd.

import java.util.*;
import java.lang.*;
import java.util.Scanner;

class Main
{
	public static void main (String[] args) throws java.lang.Exception
	{
       int liczbaTestow;
       int  licznikLiter;
       String tekst, tekstSkrocony, licznikLiterString;
       Scanner scan = new Scanner(System.in);
       liczbaTestow = scan.nextInt();


        for(byte i = 1; i <= liczbaTestow; i++){
            tekst = scan.next();
            tekstSkrocony = "";
            licznikLiter = 1;
            char zn = 0;
            
            for(int j = 0; j < tekst.length(); j++){
                if(zn == tekst.charAt(j)){
                    licznikLiter++;
                }
                else if(zn != tekst.charAt(j)){
                    if(licznikLiter == 1){
                        tekstSkrocony = tekstSkrocony + zn;
                    }
                    else if(licznikLiter == 2){
                        tekstSkrocony = tekstSkrocony + zn + zn;
                    }
                    else if(licznikLiter > 2){
                        licznikLiterString = Integer.toString(licznikLiter);
                        tekstSkrocony = tekstSkrocony + zn + licznikLiterString;
                    }
                    licznikLiter = 1;
                }
                zn = tekst.charAt(j);
            }
            if(licznikLiter == 1) tekstSkrocony = tekstSkrocony + zn;
            else if(licznikLiter == 2) tekstSkrocony = tekstSkrocony + zn + zn;
            else if(licznikLiter > 2){
                licznikLiterString = Integer.toString(licznikLiter);
                tekstSkrocony = tekstSkrocony + zn + licznikLiterString;
            } 
             System.out.println(tekstSkrocony);
        }
	}
}

1

No to użyj debuggera :)

edit: pomijając jak wygląda Twój algorytm, mógłbyś użyć metody trim() na końcowym stringu dzięki czemu pozbyłbyś się spacji na początku/na końcu.

0

Problem w tym, że nie wiem, czego tu szukać nawet. Wyniki są ok (przynajmniej mi się tak wydaje). Rzeczywiście była spacja przed stringiem, ale ten problem już wyeliminowałem. Najgorsze, że nie wyskakują mi żadne błędy, bo wtedy byłoby mi się łatwiej zorientować ;P A tak wydaje mi się, że u mnie jest ok - choć wiem, że coś musiałem przeoczyć, albo na coś nie wpadłem.
Edit2. Rzeczywiście trim() zadziałał i wynik przeszedł. Mi się to wydaje dziwne, ale u siebie sprawdzałem przed chwilą i po poprawieniu nie miałem żadnych spacji przed i po wyniku. Ale coś jednak musiało być na rzeczy. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1