61 / 192
Apr 2016

Więc popatrz jeszcze raz na swój poprawny kod umieszczony tutaj na forum. [zabrakło nowej linii].

Niektóre zmienne w pętli należy zerować - np sume ciastek. Ale wystarczyłoby program przetestować nawet takimi testami jak w zadaniu [np na ideone] i taki błąd natychmiast byś wyłapał. Jeżeli jednak wolisz, aby to spoj testował poprawność, to bedzie właśnie taki efekt - multum WA, sigsegv itd. A jak ich nazwałeś grubasów może być: (1 ≤ N ≤ 10.000 więc w pudełko stu elementowe ich żadną siłą nie upchniesz - stąd sigsegv.

PS
A miałem zaoszczędzić sobie pisania, ale widać nie dane mi było. :wink:

A ja mysle, dwoje sie troje dlaczego nie mam tyle miejsca w pamieci. Thx. Bede pamiętał na przyszłosc jak dokladnie pisa programy na ta strone.

No i masz jeszcze jeden błąd - w kodzie podanym tu na forum. Powyższa, zacytowana, instrukcja nie potrzebnie jest w pętli. Może i powinna być poza pętlą wczytującą kolejnych "grubasów" i sumującą ilość zjedzonych ciastek.

Poprawiłem potem inny kod. Pozmieniałem na spokojnie. Dalem wszystko gdzie wydaje mi sie ze powinno byc.

Jeżeli na forum chcesz pokazaćswój kod, to: wklejasz go, zaznaczasz cały kod [myszą] i klikasz w taki znaczek "</>" w menu. Jeżeli dostałeś ac, to raczej powinieneś usunąć swój kod - edytując swój post. Zmienne powinno się zerować na początku, przed użyciem, a nie na końcu pętli.

Czyli:
int suma_ciastek = 0;

No i jeżeli wysłałeś do sprawdzenia na spoja, to po co wysyłasz też tutaj? Przecież spoj Ci da najlepszą i natychmiastową odpowiedź.

Witam Serdecznie, podczas testowania programu wyskakuję mi błędna odpowiedź próbowałem sprawdzeń ręcznych ktoś ma jakąś sugestię ? Czy to może być kwestia ceil ? Poniżej znajduję się kod.

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    unsigned int ile;
    cin >> ile;
    for(int i=1;i<=ile;i++)
    {
         unsigned short ludzie=0;
         unsigned long long ciastka=0;
         float wynik=0;
         cin >> ludzie >> ciastka;
         for (int i=1;i<=ludzie;i++)
         {
             float sek,wyn;
             cin >> sek;
             wyn=84600/sek;
             wynik+=wyn;
         }
         cout << ceil(wynik/ciastka) << endl;
    }
}
3 months later

Ktoś wyżej napisał, że to zadanie nie za bardzo lubi się z biblioteką < math.h >

co w tym kodzie może być nie tak?

using namespace std;

int main()
{

int doba = 86400;
int chowtime;
int N;
int test;
cin>>test;
int M;
int piece;
int pieces=0;
int boxes=0;

for(int i=0;i<test;i++)
{ boxes=0;
cin>>N>>M;
while(0<N)
{
cin>>chowtime;
piece=doba/chowtime;
pieces+=piece;
N--;}
while(pieces>0)
{
pieces=pieces-M;
boxes++;}

cout<<boxes;

}
return 0;}

Na pewno "nie tak" jest on wstawiony :slight_smile:

W związku z tym nie mogę go uruchomić. Czytam więc pobieżnie i hm... upiekło Ci się :wink: Widzę dwa błędy i powinno być AC.

1) Co wyświetla Twój kod dla danych testowych? Bo na pewno nie osiem w pierwszej linii i dwa w następnej linii. Wstaw endl w odpowiednie miejsce.
2) Słusznie zerujesz boxes w każdym przypadku testowym. A co z pozostałymi zmiennymi? Czy którejś z nich też nie trzeba wyzerować?

11 days later

Witam. Nie jestem wstanie pozytywnie przejść sprawdzania kodu poprzez sędziego. Na stronie Ideone wyświetla poprawne wartości. Proszę o pomoc i dziękuję.

#include <iostream>
using namespace std;
int testy,uczestnicy,ciastka,czas1,czas2,czas3,doba=86400,zjedzone;
int main()
{
int suma;
cin>>testy;
for(int i=1;i<=testy;i++)
{
cin>>uczestnicy>>ciastka;
if(uczestnicy==3)
{
cin>>czas1>>czas2>>czas3;
zjedzone=((doba/czas1)+(doba/czas2)+(doba/czas3));
suma=zjedzone/ciastka;
if(zjedzone%ciastka!=0)
{
suma++;
cout<<suma<<endl;
}
else cout<<suma<<endl;
}
else
{
cin>>czas1>>czas2;
zjedzone=((doba/czas1)+(doba/czas2));
suma=zjedzone/ciastka;
if(zjedzone%ciastka!=0)
{
suma++;
cout<<suma<<endl;
}
else cout<<suma<<endl;
}
}
return 0;
}

a dla takiego testu:

1
5 1
1 1 1 1 1

lub

1
10000 1
1 ... 1

oczywiście w linii 1 ... 1 jest 10000 razy 1

a tak w ogóle, to warto przed napisaniem pytanie przeczytać wszystkie porady związanie z zadaniem, może nie trzeba zadawać po raz kolejny pytania, które już było

Czytając dowiedziałem się, że sędzia nie lubi się z funkcjami zaokrąglającymi i o odpowiednim stosowaniu endl, aby nie było problemu z odczytem "wyniku". Dla podanych przez Ciebie danych program nie działa już prawidłowo. Proszę o kolejną wskazówkę w miarę możliwości.

Twój program działa poprawnie tylko jeśli jest 2 lub 3 obżartuchów, a może ich być od 1 do 10000. Tak więc zamiast if(uczestnicy==3) zastosuj coś co zadziała niezależnie od tego ilu ich będzie .

Co do funkcji zaokrąglających, to nie ma już problemu z prawidłowo użytym ceil() o ile o niego ci chodzi.

Dziękuje bardzo za pomoc, udało się. Z góry zakładałem, że program ma tylko spełniać warunki zadania i nic poza tym, a dodatkowo informacja o działającej funkcji ceil również była przydatna.

W zadaniu jest wyraźnie napisane ilu może być obżartuchów, patrz na specyfikację wejścia i wyjścia a dopiero potem na przykłady pod zadaniem.

11 days later

Witam, może ktoś określić co jest nie tak z moim kodem? Po zgłoszeniu go wyrzuca mi 'Segmentation fault'. http://ideone.com/r8XLtH16 W codeblocksie i na cpp.sh działa prawidłowo. Nie wydaje mi się, żebym wychodził poza tablice ani nic takiego. Nie bardzo rozumiem co powoduje ten błąd, dopiero zaczynam swoją przygodę z programowaniem.

czy przeczytałeś treść zadania ?
czy pamiętasz ile może być testów ?

Tak, przeczytałem treść. Nie jest tam napisane ile może być testów. W specyfikacji wejścia mam zapisane, że sprawdza dla 2. Jeśli chodzi o użyte tablice to przy zwiększeniu ich do ponad 3 argumentów( tyle ile zaproszono maksymalnie obżartuchów na wejściu) również program nie che być zaakceptowany.

Skoro w specyfikacji zadania nie napisano ile jest testów, to skąd twoje przekonanie, że wystarczą 2 lub 3 testy ?

to może spróbuj dla: 4, 5, ... itd. aż zaliczy :slight_smile: