@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) {
- Nie możesz odwoływać się do indeksu poza zakresem tablicy (ostatni przebieg pętli)
- 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.
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;
}
niby jak sprawdzam na przykładach to działa ale sedzia wywala błąd odpowiedzi
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;
}
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;
}
Witam,
Czy ktoś może powiedzieć dlaczego jest źle?
http://ideone.com/eUJMzJ99
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?
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?