3 / 13
Feb 2021

Witam wszystkich.
Wlasnie napisalem nastepujacy kod ktory nie przechodzi przez sedziego, prosilbym o udzilenie pomocy i wskazanie w czym tkwi blad, gdyz na pc program wykonuje sie poprawie. Oto kod:

#include

using namespace std;

int obe, pac;
int nr;

int main()
{
cin>>nr;
int tab[nr];

for (int i=0; i<nr; i++)
{
    int sum=0;
    cin>>obe>>pac;

    for(int j=0; j<obe; j++)
    {
        cin>>tab[j];
        sum=86400/tab[j]+sum;
    }
    if(sum%pac==0)
        cout <<(int)sum/pac<< endl;
    else
        cout<<(int)sum/pac+1<< endl;
}
return 0;

}

  • created

    Feb '21
  • last reply

    Apr '22
  • 12

    replies

  • 922

    views

  • 7

    users

  • 9

    likes

  • 3

    links

ID: mojego kodu ktory jest nieaceptowany przez sedziego to 27468434, a blad to SIGSEGOV (segmentation fault).

Uzupełnię:

  1. kod źle wklejony (czyli pkt 3 @pwojszepielak, ale powtórzę, żeby lepiej dotarło :wink: ) .
  2. po co Ci ta tablica? Przecież for po liczbie testów wykona się prawidłowo bez niej…
  3. … może potrzebujesz tablicy w innym miejscu i innego rozmiaru? Przyjrzyj się zakresom w pętlach i zastanów czy na pewno nie wybiegasz poza zakres tablicy (pisanie poza dostępną pamięcią powoduje Twojego segfaulta) (czyli pkt 2 @pwojszepielak)
  4. wiem, że działa gdy zadeklarujesz tablicę w taki sposób, ale w perfekcyjnym kodzie liczy się nie tylko czy działa, ale też czy jest zgodne z pisanymi i umownymi standardami klepania kodu. Programistycznej moładzioży zaleca się podczas nauki C++ zapoznać z dynamicznym alokowaniem pamięci i to jest świetna okazja na pierwszy kontakt z tym tworem :slight_smile: (czyli pkt 1 @pwojszepielak)
1 year later

Witam
Jak napisałem kod na to bez wykorzystania tablic nieb na replit.com3 mi liczy dobrze z danymi z zadania, ale sędzia odrzuca.
Pomoże ktoś?? Dlaczego nie zalicza??
Z góry dzięki.

Trzeba sprawdzić czy wyjście programu jest zgodne ze specyfikacją z zadania. (podpowiem że nie jest)
Sam sposób obliczeń wygląda dobrze.

Znalazłem / zrozumiałem błąd na przykładzie zadania z Przedszkolanką.
Jeszcze poproszę was o odpowiedź na dwa pytania.
Dlaczego wyświetlanie odpowiedzi jedna za drugą powoduje błąd a jedna pod drugą już nie?? (generalnie to było błędem w tym zadaniu i z przedszkolanką).
Jak usunąć kod który dodałem do tematu aby nie podpowiadać innym??

Z tego co piszesz to nie zrozumiałeś błędu, wyświetlanie odpowiedzi jedna za drugą jak najbardziej może być, zastanów sie jeszcze raz czego brakuje…
Co do usuwania kodu to pod postem masz ikonkę w kształcie ołówka, służy do edycji posta

Dopisałem na obu warunkach if’a na końcu wyjścia endl; nie zmieniałem nic w kodzie / obliczeniach i sędzia zaakceptował.
Więc bardzo proszę niech ktoś to wyjaśni!!??

W treści zadania w specyfikacji wyjścia jest napisane że odpowiedzią na każdy z zestawów danych jest jedna liczba całkowita w osobnej linii. Ja bym się tego trzymał i problemu nie ma.
Sędzia nie jest człowiekiem tylko programem komputerowym, który uruchamia Twój program z przekierowaniem wejścia i wyjścia standardowego na/do plikow testowych. Następnie sędzia porównuję wygenerowane wyjście że wzorcem odpowiedzi i na tej podstawie zalicza lub nie zadanie.
Jak bardzo drobiazgowy przy porównywaniu jest sędzia zwykle nie wiemy. Nie wiemy czy dodatkowe spacje, tabulatory są akceptowalne. Nie wiemy czy użycie spacji zamiast znaku nowej linii będzie zaakceptowane itp.
Jeszcze popatrzmy na przykład z treści zadania. Gdy program wygeneruje na wyjściu “82” zamiast “8
2” to jednak nie powinien zaliczyć. Sędzia nie sprawdza Twój program w konsoli zestaw po zestawie, linia po lini w konsoli.

dokładnie jak powiedział wyżej pawoj20… Trzeba trzymać sie specyfikacji wyjścia, jak ma być w osobnej linii to niech będzie w osobnej linii. Akurat w obrzartuchach z ciekawości sprawdziłam i przeszło i po kolej, ale odpowiedź 82 nie równa sie odpowiedzi 8 2. Twój program bez endl wydawał pierwszą wersję…

A jednak. Dadanie nawet przecinka jest jakąś zmianą. Dodanie endl’a, lub dwóch endl’ów jest już zmianą w kodzie a w tym wypadku kluczową i … jak wyżej już odpowiedzieli Ci.

Nie wiemy jakiego typu/rodzaju sedziego [programu komputerowego] użył autor zadania [problem setter]. Jest kilka do wyboru a i problem setter sam może napisać swój własny. Nawet taki, że ostatecznie wszystkiego typu odpowiedzi np nawet :

82

byłyby akceptowane.

Ale najczęściej autorzy używają domyślnego sędziego [programu], który ignoruje wszelkie nadmiarowe białe znaki i dowolne ich kombinacje, ale minimum jeden, rozdzielający wypisywane dane, jest obowiązkowy.
Wiec w tym zadaniu poprawne odpowiedzi do testu przykładowego to np:

           8                                             2
   8



2

     8


                                        2

itd.

Ale już

82

czy



           82

są błędne i nie są akceptowane!

Oprócz tego sędziego jest też gotowy do użycia sędzia bardzo dokładny, który sprawdza wszystko dokładnie znak po znaku i nie akceptuje nawet minimalnej nawet pojedyńczej zmiany, nawet jednego dodatkowego białego znaku - spacji.

Należy jeszcze wspomnieć, że białe znaki, to nie to samo co znaki kontrolne nie drukowalne, np chociażby ‘\0’. To już jest bład nawet dla tego pierwszego - wielce tolerancyjnego sedziego.

Jak to wszystko ogarnąć? Zostań problem setterem i będziesz miał szanse zobaczyć to od drugiej strony od kuchni. Ale na razie rozwiązuj jak najwięcej zadań, zaczynając właśnie od tych łatwych.

Wesołych i Zdrowych Świąt!