1 / 110
Dec 2015

Cześć!
Mój program kompiluje się poprawnie. Na ideone też działa tak jak powinien. Sprawdzałem wszystkie możliwe przypadki wystąpienia liter i wszystko działa jak należy, lecz ciągle wyrzuca mi "błąd kompilacji".
Na forum szukałem rozwiązania lecz nie znalazłem.
Proszę o pomoc bo nie wiem czemu jest źle..
Oto kod:

//działa już

  • created

    Dec '15
  • last reply

    Feb '23
  • 109

    replies

  • 6.5k

    views

  • 47

    users

  • 12

    likes

  • 29

    links

Frequent Posters

There are 109 replies with an estimated read time of 11 minutes.

Usuń warunek:
if(c>=1&&c<=50)

oraz:
if(czy_wielkie(tekst,strlen(tekst))==true)

a także funkcję:
bool czy_wielkie();

W zadaniu nie jest powiedziane, że mają być tylko wielkie litery. Po tych poprawkach AC.

PS.
Popraw także składnię:

nie może być odstępu między # , a include

# include pisałem bo mi tutaj na forum nie chciało poprawnie wyświetlać.
Usunąłem oba warunki oraz tą funkcję i nadal WA.

Nawet po poprawieniu twojego kodu tak żeby działał i usunięciu tej funkcji twój kod okazał się być za długi (mamy dostępnych 2000 b). Twój kod jest ponad dwa razy dłuższy od mojego. Ty użyłeś 5 ifów, ja tylko 2. Postaraj się nie wynajdywać koła drugi raz/konstruować koło razem z kołpakiem (łączyć warunki w jeden, nie używać tych samych warunków do następnego ifa). Powodzenia stuck_out_tongue

Pozwolę sobie podpiąć się do tematu.
Napisałem kod, który przechodzi testy jednak SPOJ wyrzuca błędną odpowiedź:

#include <iostream>
#include <string>

using namespace std;

void abbr(string input) {
    char last;
    int count = 1;

    for(int i = 0; i <= input.size(); i++) {
        if(input[i] == last) {
            count++;
        } else {
            if(count == 2) {
                cout << last;
            } else if(count > 2) {
                cout << count;
            }

            cout << input[i];
            count = 1;
        }

        last = input[i];
    }
}

int main() {
    int n;
    string input;

    cin >> n;

    for(int i = 1; i <= n; i++) {
        cin >> input;

        abbr(input);
        cout << "\n";
    }

    return 0;
}

Byłbym wdzięczny, za jakąś podpowiedź w czym problem smile.

Na początku nie rozumiałem dlaczego użyć tylko jednego koła, ale gdy usiadłem do programu stało się to jasne i logiczne smiley Teraz działa! Dzięki wielkie!
Usuwam kod

@sajran
Nie mogę znaleźć przykładu, dla którego Twój program nie działa, ale błąd jest w tym miejscu:

 for(int i = 0; i <= input.size(); i++) {
    if(input[i] == last) {
  1. Nie możesz odwoływać się do indeksu poza zakresem tablicy (ostatni przebieg pętli)
  2. Nie możesz porównywać danych z niezainicjowaną zmienną last (pierwszy przebieg pętli)

W obu przypadkach, w miejscach pamięci, do których się odwołujesz znajduje się jakaś losowa wartość i może się zdarzyć, że ten warunek w if da Ci wartość true (i dla jakiegoś testu tak się dzieje), mimo że wydaje się inaczej.

14 days later

U mnie brak ac, a dla testów z zadania program wykonuje działania poprawnie.

    #include <iostream>

using namespace std;
int t;
string tekst;
int main()
{
    cin >> t;
    for(int i=0; i<t; i++)
    {
        cin >> tekst;
        int x = tekst.length();
        for(int j=0; j<x; j++)
        {
            if(tekst[j]=='*'){continue;}
            else if(tekst[j+2]==tekst[j])
            {
                int ile=1;
                for(int w=j+1; w<x; w++)
                {
                    if(tekst[w]==tekst[j]){ile++; tekst[w]='*';}
                    else break;
                }
                cout << tekst[j] << ile;
            }
            else cout << tekst[j];
        }
        cout << endl;
    }
return 0;

}

test ABA odpowiedź twojego programu A1BA

17 days later

Zamiast modyfikować stringa wypisuj wyniki od razu, wejście i wyjście to 2 różne pliki więc dla sędziego nie ma to znaczenia, a znacznie uprości kod.

niby jak sprawdzam na przykładach to działa ale sedzia wywala błąd odpowiedzi frowning
jakaś porada?

#include<iostream>
#include<string>
using namespace std;
string skrot(string text)
{
int powt = 1;
string tymcz;
tymcz.erase();
int max = (int)text.length();
for (int j = 1; j < max; j++)
{
	if (text[j] == text[j - 1])
	{
		if (powt == 1)tymcz += text[j - 1];
		powt++;
		if (j == (max - 1))
		{

			if (powt == 1)tymcz += text[j];
			else if (powt == 2)
			{
				tymcz += text[j];
			}
			else if (powt > 2 && powt <= 9)
			{
				tymcz += '0' + powt;
			}
			else if (powt > 9)
			{
				tymcz += '0' + powt / 10;
				tymcz += '0' + powt % 10;
			}
			powt = 1;
		}
	}
	else if ( text[j] != text[j - 1] )
	{
		if (powt <= 2) 
		{
			tymcz += text[j - 1];
			
		}
		else if (powt > 2 && powt<=9)
		{
			tymcz += '0' + powt;
		}
		else if (powt > 9)
		{
			tymcz += '0' + powt / 10;
			tymcz += '0' + powt % 10;
		}
		if (j == (max - 1))tymcz += text[j];
		powt = 1;
	}
	
	
	
}

return tymcz;
}
int main()
{
int t;
cin>> t;
string text;

for (int i = 0; i < t; i++)
{
	cin >> text;
	cout<<skrot(text)<<endl;
}


	return 0;
}
13 days later

przydała by się pomoc bo mam cały czas Błędna odpowiedź

Mógłby ktoś mi pomóc znaleźć błąd? Wyskakuje mi błędna odpowiedź.

#include <iostream>
#include <sstream>
using namespace std;

int ile,licznik;
string wyraz;


int main()
{
    cin >> ile;
    for(int i=0;i<ile;i++)
       {
           cin >> wyraz;
    for(int j=0;j<wyraz.length()-1;j++)
    {
        
        if(wyraz[j]==wyraz[j+1])
            licznik++;
            else licznik=0;
        if(licznik>=2 && wyraz[j]!=wyraz[j+2] && wyraz[j-1]==wyraz[j+1])
            {

ostringstream ss;
ss << licznik+1;
string str = ss.str();
           wyraz.replace(j-(licznik-2),licznik,ss.str());
            licznik=0;
            ss.str("");


             licznik=0;
j=licznik;
            }
    }
cout << wyraz<<endl;
       }



    return 0;
}
6 months later

wykonaj ten kod u siebie, z przekierowaniem wyjścia do pliku, a następnie obejrzyj w jakimś edytorze hexadecymalnym - sam zrozumiesz dlaczego jest źle

3 months later

Cześć,
powie mi ktoś, czemu mój spoj nie akceptuje mojego kodu?

usuwam link, bo wyjaśnione

Zgubiłeś literę Q - alfabet amerykański taką posiada.

26 days later

Powie mi kto co jest źle w tym kodzie, przechodzi testy poprawnie a SPOJ wywala mi "Błędna odpowiedź".

include

include

include

using namespace std;
int C;
void skracanie(string w)
{
char l;
int dlugosc=w.length();
int ile;
string iles;
string w2;
for(int i=0; i<dlugosc; i++)
{
ile=0;
l=w[i];
while(w[i]==l)
{
ile++;
i++;
}
i--;
if(ile==1) w2=w2+l;
if(ile==2) w2=w2+l+l;
if(ile!=1&&ile!=2)
{
stringstream ss;
string str;
ss << ile;
ss >> iles;
w2=w2+l+iles;
}
}
cout<<w2<<endl;
}
int main()
{
cin>>C;
string wyraz;
for(int i=0; i<C; i++)
{
cin>>wyraz;
skracanie(wyraz);
}
return 0;
}

PS
Jak się dodaje kod?

Cześć,

Zabrzmi to dziwnie - ale wrzuciłem Twój kod na spoja i przeszedł mi na zielono... (icludy dodałem sobie aby się kompilowało bo tu coś się nie wkleiły).
Wiec proszę Cie o zedytowanie swoje posta i usunięcie kodu.

Większość osób wrzuca kod na ideona i na forum wkleja link do tego kodu. Tu opis:

2 months later

Witam.
Nie chce śmiecić nowym tematem, więc podłącze się do tego.
Mam problem bo gdy sam sprawdzam swój program wszystko wydaje się być ok, ale SPOJ nie chce mi zatwierdzić.
Mógłby ktoś rzucić okiem?

znalazłem_błąd.dzieki62