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

Odpowiedz Nowy wątek
2019-08-20 17:41
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);
        }
    }
}
edytowany 1x, ostatnio: MDKS, 2019-08-20 17:42

Pozostało 580 znaków

2019-08-20 18:47
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;
}
edytowany 1x, ostatnio: kixe52, 2019-08-20 18:47

Pozostało 580 znaków

2019-08-20 20:23
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);
        }
    }
}

Pozostało 580 znaków

2019-08-20 20:24

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.

edytowany 1x, ostatnio: kixe52, 2019-08-20 20:42

Pozostało 580 znaków

2019-08-20 20:43
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.

edytowany 3x, ostatnio: MDKS, 2019-08-20 20:48

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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