81 / 192
Sep 2016

a uruchomiłeś ten program dla jakichkolwiek danych, choćby najprostszego, przykładowego z zadania ?

doprowadź do tego, aby działał, zamiast zgłaszać błąd (nie jest to trudne, wystarczy usunąć to co niepotrzebne :slight_smile: ), a dalsza pomoc też nie będzie potrzebna :slight_smile:

Strona nie chce mi zaakceptować zadania :frowning: odkryłem że liczba ciastek w pudełku (m) powinna być w long long wtedy nie wyrzuca programu ale przy wielkiej ilości uczestników ale po wpisaniu ich ok 10 czasów jedzenia ciastek wywala program do pulpitu. Jestem tu nowy wiec przepraszam za śmiecenie i nieogarnięte zachowanie jestem otwarty na wszelkie wskazówki co i jak powinienem robić :slight_smile:

Znalazłem błąd było nim użycie tablicy przy czasie przepraszam za spam dziękuje za pomoc :slight_smile:

zgadza się, tablica była całkowicie niepotrzebna

a dodatkowo źle deklarowana - jeżeli już, to powinna być deklaracja przed pętlą na potrzebny rozmiar
oraz źle użyta - jeżeli mamy *tablica = new int[n] to przecież element tablica[n] nie istnieje

10 days later

Cześć, potrzebuję pomocy. Kod był wielokrotnie poprawiany, judge odrzuca każdą próbę, mimo że dla danych przykładowych wyniki wychodzą poprawne.

include

include

using namespace std;

int main()
{
float n,t; //liczba uczestnikow, liczba ciastek w pudelku, liczba testow
float m;

cout<<"Podaj liczbe testow: ";
cin>>t;

for (int j=0; j<t; j++)

{
    cout<<"Podaj liczbe uczestnikow, a po spacji liczbe ciastek w pudelku: ";
    cin>>n>>m;

    cout<<"Podaj czas jedzenia ciasteczka dla kazdego uczestnika: ";

    float ciastka[n];
    float czasy[n];
    float suma=0;

for (int i=0; i<n; i++)
{
    cin>>czasy[i];
}

  for (int i=0; i<n; i++)
{
    ciastka[i]=floor(86400/czasy[i]);
    suma+=ciastka[i];
}





float pudelka;
if(suma !=0)
{
    pudelka=ceil(suma/m);
}
else
{
    pudelka=0;
}


cout<<"Nalezy kupic "<<pudelka<<" pudelek ciastek."<<endl;

}
return 0;

}

kod programu przekazujemy poprzez link do ideone.com5

proponuje, abyś tam przeniósł kod, uruchomił (trzeba trochę poprawić), w okienko dane wejściowe (stdin) wstawił przykładowe dane z zadania i obejrzyj wynik (stdout), czy jest zgodny z oczekiwaniami aurora zadania ?

czy naprawdę uważasz, że

Podaj liczbe testow: Podaj liczbe uczestnikow, a po spacji liczbe ciastek w pudelku: Podaj czas jedzenia ciasteczka dla kazdego uczestnika: Nalezy kupic 8 pudelek ciastek.
Podaj liczbe uczestnikow, a po spacji liczbe ciastek w pudelku: Podaj czas jedzenia ciasteczka dla kazdego uczestnika: Nalezy kupic 2 pudelek ciastek.

to jest to samo co:

8
2

Wydawalo mi się, że komentarze skierowane do użytkownika nie będą miały znaczenia dla działania programu. W każdym razie, po ich wykomentowaniu spoj akceptuje program. Dziękuję.

To nie są komentarza - to wyjście programu. A na wyjściu programu musi być dokładnie to, co sobie życzy autor programu, różnice mogą się pojawić tylko w białych znakach, a i to nie zawsze

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

  1. Czy sądzisz, że: ".. N ≤ 10.000.." <==> N ≤ 10 ??
  2. Po jaką ... używasz w ogóle tablicy??
  3. Jak wyżej, ... typu float??
  4. 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.

Rozumiem już Dzięki za pomoc Narbej. Teraz wiem że zadania mają być zrobione dokładnie z instrukcją. Zabieram się zatem do rozwiązania! :slight_smile:

13 days later

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;

}

  1. Zaznacza się cały kod i dopiero klika w </> lub wkleja kod na ideone.com, a tu link do wykonanego tam testu.
  2. 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.
  3. 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
  4. 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
  5. 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ś.
20 days later

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ć! :wink: 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ć :wink:. Ż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;

Wielkie dzięki, po wprowadzeniu poprawek wszystko działa jak należy, faktycznie nie przeczytałem dokładnie polecenia, jeszcze raz dzięki za pomoc :grinning: .