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
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 .
@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?