Mam podobny problem do kolegi wyżej z tym że prócz błędu SIGSEGV w SPOJ pokazuje mi w ideone.com że kompilator oddaje na końcu informację "inf" czy może mi ktoś powiedzieć skąd się to bierze i dlaczego sędzia odrzuca zadanie ? czy to właśnie dla tego ?
https://ideone.com/n1KNuK4
- Czy sądzisz, że: ".. N ≤ 10.000.." <==> N ≤ 10 ??
- Po jaką ... używasz w ogóle tablicy??
- Jak wyżej, ... typu float??
- Jak wyżej, zmiennych globalnych ?
Z powodu błędu w 13 linii twojego programu.
inf === infinity === wartość niewyobrażalnie duża, lub wyobrażalna, ale przekraczająca maks wartość [pojemność] użytego typu zmiennej.
:PS
Warto uważniej czytać treść zadania - powtórzyć to czytanie, przy problemach z zaliczeniem, a potem, gdy pytasz na forum, warto uważnie przeczytać i przemyśleć cały wątek/wątki na temat.
Witam wszystkich Panowie mam problem z obżartuchami takiego rodzaju, że ten int nie zaokrągla mi pudełek w górę tylko w dół dlatego przy pierwszym teście wychodzi mi 6 pudełek a nie 8. Kod masakra wiem dopiero się uczę z góry dzięki za pomoc.
include
using namespace std;
int main()
{
int ilosc_testow;
int ilosc_obzartuchow[100];
int ile_ciastek[100];
int doba=3600*24;
int j=0;
int obzartuchy[1000];
int liczba_pudelek=0;
int pudelka=0;
cin>>ilosc_testow;
for (int i=0 ;i<ilosc_testow; i++)
{
cin>>ilosc_obzartuchow[i]>>ile_ciastek[i];
while(j<ilosc_obzartuchow[i])
{
cin>>obzartuchy[i];
liczba_pudelek+=((doba/obzartuchy[i])/ile_ciastek[i]);
j++;
}
j=0;
cout<<"Ilosc paczek ciatek dla testu nr."<<i+1<<" wynosi: "<<liczba_pudelek<<endl;
}
return 0;
}
- Zaznacza się cały kod i dopiero klika w
</>
lub wkleja kod na ideone.com, a tu link do wykonanego tam testu. - SPOJ raczej nie służy do nauki [programowania] a do, swoją drogą w bardzo atrakcyjnej formie, testowania i utrwalania swoich umiejętności i porównywania z umiejętnościami innych [już coś kolwiek umiejących] programistów. Do tego [nauki] jest literatura i nauczyciele, a wybacz ja nie jestem.
- bonus [number 2]: ---> http://213.192.104.217/phpBB3-spoj-pl-backup/viewtopic.php?f=1&t=1214&sid=473a6ed0abb4ff296004debda0fd65457 , ze szczególnym uwzględnieniem pkt 10
- warto też poczytać posty w tym wątku + posty w innych wątkach dotyczących tego zadania: http://discuss.spoj.com/search?q=ob%C5%BCartuchy
- Podstawą jest treść zadania, którą trzeba czytać, czytać i jeszcze raz czytać aż do zrozumienia, a szczególnie gdy ma się z nim problemy: "Na podstawie tych danych, organizatorzy Zlotu chcą określić ile należy kupić ciastek", a dopiero potem, liczą ile to pudełek: "ciastka w sklepie sprzedawane są w pudełkach o stałej wielkości". Z twojego kodu widać, że tego niestety nie zauważyłeś/nie uwzględniłeś.
Witam! Mam problem z zadaniem Obżartuchy, kod sprawdzałem na ideone i wyniki mam dobre, ale sędzia pokazuje mi błąd wykonania (SIGSEGV). Dopiero niedawno zacząłem naukę programowanie i nie mam pojęcia czemu mi nie przyjmuje tego kodu. Proszę o pomoc.
#include <iostream>
using namespace std;
int prob;
int main()
{
cin>>prob;
for (int i=0;i<prob;i++)
{
int pudelka=0, ile_o, ciastka, czas[100], suma=0,doba=86400;
float x[100];
cin>>ile_o>>ciastka;
for(int i=0;i<ile_o;i++)
{
cin>>czas[i];
}
for(int i=0;i<ile_o;i++)
{
if (x[i]=doba%czas[i]==0)
{
x[i]=doba/czas[i];
}
else
{
x[i]=(doba/czas[i])-1;
}
suma+=x[i];
}
if (suma%ciastka==0)
{
pudelka+=suma/ciastka;
cout<<pudelka<<endl;
}
else
{
pudelka+=(suma/ciastka)+1;
cout<<pudelka<<endl;
}
}
return 0;
}
Warto najpierw nauczyć się czytać! Czytać ze zrozumieniem, więc może wróć i zacznij od tego?
W poście nad twoim umieściłem kilka bezcennych rad, przeczytaj i zastosuj się chociaż do pkt. 1 i 5. To ja osobiście, wyedytowałem i poprawiłem Ci formatowanie twojego błędnie wklejonego kodu.
Przemyśl też koniecznie pkt 5. Poniżej malutki fragmencik z treści zadania:
... W pierwszej linii znajdują się dwie liczby całkowite N i M oddzielone pojedynczą spacją (1 ≤ N ≤ 10.000, 1 ≤ M ≤ 1.000.000.000). Oznaczają one odpowiednio liczbę zaproszonych obżartuchów na Zlot oraz liczbę ciastek ....
Czy naprawdę sądzisz, że czas[100] jest na tyle rozciągliwy, aby pomieścić 10000 obżartuchów? Po kiego, tak w ogóle, potrzebne jest Ci wpychanie ich wszystkich w jedną ciasną klatkę? Czy nie możesz, spytać pierwszego, tylko o to, ile czasu je ciastko, zapamiętać [przetworzyć], wpuścić go na Zlot i przejść do następnego?
Całą resztę twojego rozwlekłego kodu, kładę na karb tego, że się dopiero lub zaczniesz uczyć czytać . Życzę powodzenia i wytrwałości.
PS
SIGSEGV wynika właśnie z powodu nierozciągliwości twojego czasu i grzebania po nie przydzielonej pamięci.
PS 2
instrukcja:
x = doba/czas - 1;
jest błędem - dzielenie całkowitoliczbowe jest zawsze ucinane[zaokrąglane do liczby całkowitej w dół] i w tym wypadku nic nie zmienia tego faktu, to, że x jest typu float. Najpierw jest tu wykonywane dzielenie całkowitoliczbowe, a dopiero potem wynik tego dzielenia, konwertowany jest na typ float. Wystarczy więc tylko samo:
x = doba/czas;
bez całej reszty sprawdzania modulo etc.
PS 3
Jeszcze lepiej po prostu:
suma += doba/czas;
Gratuluję!.
Może jeszcze parę uwag?
- Unikaj zmiennych globalnych - zmienna ile prób.
- Nie żałuj spacji - zobacz np mój ps 3
- Jeszcze bardziej wymowne nazwy zmiennych
- Zamisat for (.. tutaj można spokojnie while, np while(prob--){ ..
- Zamiast: int doba=86400 lepiej const int doba = 24*60*60 // = 86400 obliczone w czasie kompilacji
- Zamiast ostatniego bloku if ... else, można cout << ceil ((double) suma/ciastka) ......
- + include cmath
lub cout << (suma + ciastka - 1)/ciastka << ......
- + include cmath
- PS w C tak, w C++ w funkcji main() już nie jest konieczna instrukcja return 0.
Witajcie. Jestem aż tak zły, że muszę wam o tym napisać jaki głupi błąd zrobiłem przez co ciągle mi wyrzucało błąd kompilacji . Spędziłem dzisiaj pół dnia nad tym zadaniem , bo po napisaniu go raz i wyrzucaniu błędu skasowałem wszystko i od nowa napisałem no i bez zmian , ale doszedłem do tego , że nazwałem zmienną z czasem - “time” i za każdym razem błąd kompilacji przez taką pierdołę…
Kompilator zawsze wypisuje komunikat błędu a przy odpowiednim ustawieniu, także ostrzeżenia, więc wystarczy tylko przeczytać i od razu wiedzieć gdzie tkwi problem czy błąd. Tak jest, gdy kompilujesz u siebie lub na ideone. Gdy wysyłasz od razu na spoj’u, wystarczy “kliknąć” w napis błąd kompilacji przy swoim zgłoszeniu i jak wyżej.
Mam problem z zaakceptowaniem przez sędziego mojego kodu. Informuje on o błędzie wykonania (SIGSEGV) . Proszę o pomoc i wskazówki jak mogę poprawić kod. Wyniki wychodzą prawidłowe.
#include <iostream>
using namespace std;
int n;
int main()
{
int t; int suma=0; long m;
cin>>t;
for (int j=1; j<=t; j++){
int tab[n-1]; const int x=24*60*60;
cin>>n>>m;
for (int i=0; i<n; i++){
cin>>tab[i];
suma+=x/tab[i];}
double box = suma/m;
if (box / m >0.1)
{cout<<box+1<<endl;}
else
{cout<<box<<endl;}
}
}