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?