pl.spoj.pl/problems/KC015/71 <- klik!
[bbone=CPP,398]AC[/bbone]
Sprawdziłem testy z forum - wszystkie działają. Pomysł co przegapiłem / sknociłem?
Żeby nie tworzyć nowego tematu wstawiam tutaj swój kod.
Może ktoś zerknie. Ogólnie nie jest ładnie zrobiony, ale skupiłem się kodzie. Na początku sprawdziłem możliwości ze znakami i liczbami i wyglądało dobrze. Niestety WA. Doczytałem, że występują zera wiodące to zaimplementowałem odpowiedni kod. Przetestowałem i było w porządku, jednak znowu to samo. Może popełniam jakiś błąd albo muszę zmienić podejście. Dzięki za jakąkolwiek pomoc
Jesteś niestarannym coderem albo sknerusem. Jeżeli wczytujesz string 2 elementowy, to jakiej wielkości tablicę potrzebujesz? Analogicznie string 1000 elementowy, a szczególnie gdy potem używasz strlen - wiesz jak działa ta funkcja?
Np jakoś tak [moja interpletacja, prostsza - do zrozumienia]:
int strlen (char *a){
int i = 0;
while (*a++ != '\0') i++;
return i;
}
PS
Moim zdaniem i według mojego testu, nie ma w tym zadaniu żadnych zer wiodących, a czy są/były błędne testy nie wiem. Dlatego oba komentarze usuwam z pod zadania a przenoszę tutaj i jeszcze raz zwracam uwagę, że oba komentarze mogą być bardzo błędne, nie przemyślane, błednie przetestowane.
2015-01-19 20:40:43 Karol Ka¼mierczak
Czy dane wejściowe zawierają zera wiodące?
Edit: zawierają.
Proste porównywanie łańcuchów nie wystarczy.
Ostatnio edytowany: 2015-02-13 20:52:09 2013-06-19 11:34:16 PaweÅ‚ Ciosek W testach sprawdzających jest błąd, np. dla 1234 >= 1235, mój
program wypisywał złą odpowiedz, mimo tego dostałem AC. Proponuje
zaktualizować testy. Pozdrawiam.
Witam. Jestem początkujący i stworzyłem kod, który u mnie działa bez zarzutów, ale sędzia odrzuca z podpisem "Przekroczono limit czasu". Mógłby ktoś rzucić okiem?
include iostream
using namespace std;
int main()
{
for(;; )
{
string k1,k2,x;
cin>>k1>>x>>k2;
if (x=="==")
{
if (k1==k2) cout<<"1"<<endl;
else cout<<"0"<<endl;
};
if (x==">=")
{
if (k1>=k2) cout<<"1"<<endl;
else cout<<"0"<<endl;
};
if (x=="<=")
{
if (k1<=k2) cout<<"1"<<endl;
else cout<<"0"<<endl;
};
if (x=="!=")
{
if (k1!=k2) cout<<"1"<<endl;
else cout<<"0"<<endl;
};
}
return 0;
}
Z góry dzięki za pomoc
Masz racje. Dla stringów nie da mi właściwej odpowiedzi, ale po zmianie na long double
long double k1, k2;
string x;
program już działa bez problemu, aczkolwiek sędzia dalej wyświetla, że przekroczono limit. Myślę, że problem leży właśnie w tym, że program nie wie, kiedy skończyć. Dzięki za sprawdzenie
Co tu jest nie tak?
#include <iostream>
#include <string>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
string a,b;
string znak;
int dla,dlb,i,j,ile;
bool w,e;
while(cin>>a>>znak>>b)
{
i=0;
j=0;
ile=0;
w=true;
e=true;
dla=a.length();
dlb=b.length();
while(e=true&&j<dla)
{
if(a[j]=='0') ile++;
else e=false;
j++;
}
if(ile>0) a.erase(0,ile);
j=0;
ile=0;
e=true;
while(e=true&&j<dlb)
{
if(b[j]=='0') ile++;
else e=false;
j++;
}
if(ile>0) b.erase(0,ile);
dla=a.length();
dlb=b.length();
//cout<<a<<" "<<b<<endl;
if(znak=="!=")
{
if(a!=b) cout<<1<<endl;
else cout<<0<<endl;
}
else if(znak==">=")
{
if(dla==dlb)
{
while(i<dla&&w==true)
{
if(a[i]>=b[i]) i++;
else w=false;
}
if(i==dla) cout<<1<<endl;
else cout<<0<<endl;
}
else if(dla>dlb) cout<<1<<endl;
else cout<<0<<endl;
}
else if(znak=="<=")
{
if(dla==dlb)
{
while(i<dla&&w==true)
{
if(a[i]<=b[i]) i++;
else w=false;
}
if(i==dla)cout<<1<<endl;
else cout<<0<<endl;
}
else if(dla<dlb) cout<<1<<endl;
else cout<<0<<endl;
}
else if(znak=="==")
{
if(a==b)cout<<1<<endl;
else cout<<0<<endl;
}
}
return 0;
}
Usuwanie zer wiodących coś szwankuje: https://ideone.com/w8Tkks14.
Podpowiedź: to zadanie nie wymaga usuwania zer wiodących.