22 / 41
Aug 2010

-- kod usunięty --

Czy w tym zadanku są jakieś specjalne warunki? wink Bo kod zwraca poprawne wartości confused

1.) Po kiego grzyba tablica na ponad 10000 znaków. smiley
2.) Czy 200 jest <= 10 . :mrgreen:
3.) Po kiego grzyba te dwie duże tablice ?
Podwójny papier toaletowy da radę. smiley

1 month later

Też mam problem z tym zadaniem. U mnie wszystko działa idealnie, a ciągle dostaję informację, że błędny wynik ;/
Poniżej kod programu c++:

//kod zjadl troll :P (AC)

Edit: już działa, zapomniałem uwzględnić w funkcji mniejsze(), że strlen(a) może być mniejsze niż strlen(b) smile eh, przez takie głupoty człowiek najwięcej czasu traci podczas kodzenia wink

1 month later

Na początek witam wszystkich.
Zacząłem sobie rozwiązywać tydzień temu zadania u Was no i na razie trochę rozwiązałem, ale powoli zaczyna mnie denerwować cały ten automat testujący smiley Problem ma z zadaniem KC015 i nie mam pojęcia dlaczego mi nie przyjmuje sprawdzarka tego.
Chciałem sobie ogarnąć trochę wyższa matematykę, interpolacje te sprawy z zadań trudnych, ale kurcze postanowiłem robić po kolei.
Napisałem najpierw w C, to mówi, ze źle, to napisałem w Perlu to tez nie pasuje.
Poniżej zamieszczam oba kody może ktoś by mnie nakierował, bo nie wydaje mi się żebym nie umiał tego zadania zrobić.
[bbone=perl,3137]#!/usr/bin/perl

while($line = ) {
@dane = split(/\s+/, $line);
$l1 = @dane[0];
$l2 = @dane[2];
$znak = @dane[1];

if($znak eq "==") {
	if($l1 == $l2) {
		print "1\n";
	} else {
		print "0\n";
	}
} elsif($znak eq "!=") {
   	        if($l1 != $l2) {
           	        print "1\n";
            } else {
   	                print "0\n";
           	}
    } elsif($znak eq "<=") {
   	        if($l1 <= $l2) {
           	        print "1\n";
            } else {
   	                print "0\n";
           	}
    } elsif($znak eq ">=") {
   	        if($l1 >= $l2) {
           	        print "1\n";
        } else {
                    print "0\n";
           	}
}

}
[/bbone]
Perl ma to do siebie, ze jak dostaje liczbę to jeśli jest ogromna to wyświetlą w notacji wykładniczej, wiec z porównywaniem nie powinno być problemu, chyba ze nie rozbija split na liczby tylko na stringi.

Teraz kod w C:
[bbone=c,3138]

include

include

int i;

int nierowne(char *l1, char *l2) {
for(i = 0; l1[i]; i++)
if(l1[i] != l2[i])
return 1;
return 0;
}

int rowne(char *l1, char *l2) {
for(i = 0; l1[i]; i++)
if(l1[i] != l2[i])
return 0;
return 1;
}

int mniejsze(char *l1, char *l2) {
for(i = 0; l1[i]; i++) {
if(l1[i] < l2[i])
return 1;
else if(l1[i] > l2[i])
return 0;
}
return 1;
}

int wieksze(char *l1, char *l2) {
for(i = 0; l1[i]; i++) {
if(l1[i] > l2[i])
return 1;
else if(l1[i] < l2[i])
return 0;
}
return 1;
}

int main(void)
{
char l1[1024] = {0}, l2[1024] = {0}, z1, z2;

while(fscanf(stdin, "%s %c%c %s", l1, &z1, &z2, l2) != EOF) {
	if(z1 == '!')
		printf("%d\n", nierowne(l1, l2));
	else if(z1 == '=')
		printf("%d\n", rowne(l1, l2));
	else if(z1 == '<')
		printf("%d\n", mniejsze(l1, l2));
	else if(z1 == '>')
		printf("%d\n", wieksze(l1, l2));
	memset(l1, 0, 1024 * sizeof(char));
	memset(l2, 0, 1024 * sizeof(char));
}

return 0;

}
[/bbone]
Będę wdzięczny jakby ktoś na to zerknął.

2 months later
2 months later
1 month later

-- kod usunięty --

Dla przykładowych danych działa prawidłowo, no idea dlaczego sędzia uparcie daje SIGSEGV? Z góry thx.

8 months later

Bardzo ładny kod, ale liczby nie zmieszczą się w standardowym typie - 1000 cyfr to jednak trochę dużo... smile
Polecam zrobienia na stringach...

1 year later

AC :D

Jako ciekawostkę powiem żebyście pamiętali o długości stringa smile

3 years later

Cześć, sędzie nie przyjmuje mi tego kodu mimo przejścia pozytywnie wszystkich testów które mu podaje. Proszę o jakąś podpowiedź wink

kod usuniety


Zadanie już rozwiązałem. Po prostu zamiast stringów użyłem long double...

8 months later

Ż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 :wink:

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 :slight_smile:

a skąd twój program ma wiedzieć, kiedy ma skończyć ?

nie zadałeś sobie trudu przeczytania dyskusji w tym wątku, gdybyś przeczytał to wiedziałbyś, że twoja metoda nie da właściwych odpowiedzi dla przypadków typ:

100000 >= 9

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 :slight_smile:

1 year later

potrzebna pomoc zadanie proste a z odpowiedzia ciezko edit porownywalem stringi