149 / 192
Sep 2019

Popatrzyłem na Twój kod i się przeraziłem. 83 linie kodu, gdy można to zrobić w mniej niż 30. Nie zrozum mnie źle,nie krytykuję go. Tworzenie klas ma tutaj pewnie jakieś walory edukacyjne, ale bardzo wydłuża kod i obniża, moim zdaniem, czytelność programu. Sorry, nie byłem w stanie zmusić się, by go przeczytać. Ale możliwe, że znajdziesz innych chętnych.

też popatrzyłem, potem przeczytałem, i jestem pełen podziwu, jak bardzo można skomplikować program

błąd jest dość prosty, proponuję, abyś wrócił do treści zadania i przeczytał je bardzo uważnie

3 months later

Hej, męczę się z obżartuchami już trochę i nie umiem rozkminić, dlaczego moja odpowiedź jest niepoprawna, ktoś z Was będzie tak dobry coś mi zasugerować?

Dziękuję, i proszę o wybaczenie, jeśli coś przeoczyłem tu na forum.

2 rzeczy mi sie rzuciły w oczy:

  1. Pomyśl o tym jak liczysz opakowania i czy na pewno dobrze to robisz.
  2. Przy wypisywaniu przydałoby się coś jeszcze
    Po tych zmianach mam AC z twoim kodem. Powodzenia :slight_smile:

Mam problem po dla podanych zestawow dziala a zielnej rameczki nie dostaje ;). PS. wulgaryzmy wiem zaraz przestawie wyglada to tak

#include

using namespace std;

long long int test_nr,ilosc_obazar,ciacha_wpudle,time_one_cookie;
long long int max_seconds=86400,all_cookies=0;

// liczy ile dany obzartuch opierdolil ciach
int opierdolone_ciacha(int seconds)
{
return max_seconds/seconds;
}

// How many boxes we need
int all_boxes(int cookies, int cookies_one_box)
{
if (cookies%cookies_one_box==0)
{
return cookies/cookies_one_box;
}
else
{
return (cookies/cookies_one_box)+1;
}
}

int main()
{
cin>>test_nr;

// main loop
for (int i = 0;i< test_nr; i++)
{
    cin>>ilosc_obazar>>ciacha_wpudle;
    for (int i=0; i<ilosc_obazar; i++)
    {
        // wczytac czas jedzenia 1 ciacha dla kazdego obzartucha
        cin>>time_one_cookie;
        // policzyc ile opierdoli
        all_cookies+=opierdolone_ciacha(time_one_cookie);

    }
    //cout<<"Lacznie ciach: "<<all_cookies<<endl;
    cout<<all_boxes(all_cookies,ciacha_wpudle);
    all_cookies=0;
}



return 0;

}

Kod jest zbyt wulgarnie wstawiony, żeby w ogóle na niego patrzeć.

#include

using namespace std;

int main()
{

int ilosc_testow,ilosc_obazar,ciacha_wpudle,time_one_cookie;
int max_seconds=86400,all_cookies=0;

cin>>ilosc_testow;

for (int i = 0;i< ilosc_testow; i++)
{
    cin>>ilosc_obazar>>ciacha_wpudle;
    for (int i=0; i<ilosc_obazar; i++)
    {

        cin>>time_one_cookie;
        all_cookies+=max_seconds/time_one_cookie;

    }

    if (all_cookies%ciacha_wpudle==0)
    {
        cout<<all_cookies/ciacha_wpudle;
    }
    else
    {
        cout<<(all_cookies/ciacha_wpudle)+1;
    }


    all_cookies=0;
}





return 0;

}

Proszę Bardzo z góry dzięki za odpowiedź. od razu jedna pytanie czy obojętne jest dla sędziego czy użyję dodatkowych funkcji czy też nie ?

Liczy się tylko poprawna odpowiedź (i sensowny czas wykonywania). Nadal wstawiłeś tak samo kod.

1 month later

witam musisz dodać endl; przy podawaniu wyników oraz przenieść zmienne pod fx for wyznaczającą ilość testów ( oczywiście oprócz zmiennej ilość testów.

10 days later

Ideone posiada ten sam “silnik” co spoj. NZEC występuje gdy program zwraca coś innego niż zero. Coś innego niż zero oznacza jakiś błąd programu i rzeczywiście widać to ideone. Nie znam się aż tak na pythone (coś z biblioteka cmath trzeba dopisać) Można zrobić to zadanie na samych intach.

Bo też, jak dużo osób, wklejasz tylko kod, a nie wklejasz testów [do okienka stdin] i nie testujesz swojego programu na ideone [u siebie też nie!?]. Gdybyś to zrobił, gdy to zrobisz, natychmiast dostałbyś taki komunikat --> https://ideone.com/11ApSH2, jak poniżej:

Traceback (most recent call last):
File “./prog.py”, line 12, in
File “./prog.py”, line 2, in ileCiastekZjeObzartuch
NameError: name ‘math’ is not defined

Czyli po prostu zaponiałeś o …

<-- tu jest ukryta podpowiedź, kliknij... ;-)

… zaimportowaniu biblioteki math.

#include

using namespace std;

int main()
{
long x,N;
long M;
int A[10000];
long s=0;
cin>>x;
for(int j=0;j<x;j++)
{
cin>>N>>M;

	for(int i=0;i<N;i++)
	{
		cin>>A[i];
	}
		
	for(int i=0;i<N;i++)
	{
		s+=24*60*60/A[i];
	}
	if (s%M==0) s=s/M;
	else s=(s/M)+1;
	cout<<s;
	cout<<endl;
}


return 0;

}

Witam
Jestem początkujący i proszę o pomoc z kodem. Dane wychodzą mi poprawne ale sędzia stwierdza bląd.

4 months later

Witam!
Próbując rozwiązać zadanie o tytułowych obżartuchach już na początku napotkałem problem, a mianowicie próbując uruchomić go w celu sprawdzenia dotychczasowej poprawności zostałem zapytany o podanie ilości testów, a następnie ilosci obżartuchów i ciastek w jednym pudełku lecz zaraz po tym program oddaje liczbę zamiast przejśc do kolejnej pętli, w której zapyta o czasy każdego z obżartuchów. No ale postanowiłem dokończyć kod troche ,na ślepo’’. Jednak nadal nic. Postanowiłem sprawdzić zadanie licząc, że możę SPOJ nie zaakceptuje zadania lecz chociaż pokaże błędy, których Code::Blocks nie pokazuje mnie lecz i to na nic… Skrozystałem także z ideone.com2. Tam udało mi się wychwycić kilka błędów jak literówka przy includowaniu biblioteki cmath lub brak “int” przed “i” w pętlach for. W tym momencie nie pokazują mi się żadne błędy lecz nadal kod zdaje się zatrzymywać “cin” w pierwszej pętli i oddaje jakiś wynik zamiast kontynuować. Czy źle zagnieździłem pętla czy może popełniłem jakiś kardynalny błąd. Z góry przepraszam jeśli jest to trywialnego lecz dopiero niedawno zacząłem naukę strikte programowania.

EDIT: Po kilku godzinach innego zajęcia, małej przerwy od programowania, uruchomiłem ponownie codeblocks i tym razem wszystko zadziałało lecz wyniki zdają się niepoprawne, tak samo w ideone

Hmm, może kolejna podpowiedź.
Napisz sobie krótki programik i sprawdź co dostaniesz z tego fragmentu kodu:

    int suma, ile ciastek
    float pudelkaTemp;
    pudelkaTemp = suma / ileCiastek;

Policz dla kilku wartości suma i ileCiastek

Sędzia zaakceptował i wyszło na to, że używając funkcji zaokrąglających (jak wiadomo podać im trzeba liczby jako float) lecz myślałem, że skoro zwracają one liczbę zaokrągloną (całkowitą) to można ją zapisać do int. Niestety wychodzi na to, że nie i to co zwraca funkcja (np. ceil lub floor) może być zapisane do float. Tak samo próbując dodać liczbę całkowita, która jest zdefiniowna jako float.
Nie jestem pewien czy te podpowiedzi miały na celu pokazać to ale udało mi się drogą prób i błędów do tego dojść i kod został jak już wspomniałem zaakceptowany przez sędziego.

PS. Czy usunąć powyższy kod z racji, że w połączeniu z ta wiadomością i umiejętnością czytania ze zrozumieniem daje rozwiązanie?

Rozważmy to wyrazenie:

int suma, ile ciastek;
float pudelkaTemp;
pudelkaTemp = suma / ileCiastek;
pudelka[i] = ceil(pudelkaTemp);

Gdy masz dzielenie dwóch liczb całkowitych dodatnich i wynik nie byłby liczbą całkowitą to zostaje on zaokrąglony w dół do najbliższej liczby całkowitej np. 3/4=0, 6/4=1 itp.
Wygląda o tak jak działanie funkcji floor.
A więc z prawej strony masz liczbę całkowitą. Z lewej strony masz zadeklarowaną liczbą zmiennoprzecinkową a więc dokonana jest niejawna konwersja liczby int na float. Następnie w swoim kodzie kodzie zaokrąglasz tę w liczbę w górę ale to działanie nic już nie zmieni, bo wcześniej miałeś zaokrąglenie w dół. Jeśli chcesz by liczba pudelka była naprawdę liczbą float musisz dokonać konwersji licznika na typ float (pytanie konkursowe - dlaczego wystarczy przekonwertować sam licznik a nie ma potrzeby robić tego z mianownikiem). Możesz robić to jawnie przy pomocy np. static_cast lub niejawnie np. w ten sposób:

        pudelkaTemp=(0.0+suma)/ileCiastek;

Co do kodu to oczywiście go usuń by nie kusić innych słabych duchem :slight_smile:

  1. Moim zdaniem, nie ma to najmniejszego znaczenia z wielu powodw. Ci sabi duchem i tak maja najwyrazniej klopoty z polaczeniem tych umiejetnosci. Nastepny powod, to taki, ze ci slabi duchem tak balagania na forum, zamiast najpierw czytac, ze powoli nikt juz nie zapanuje nad balaganem i nadmiarem wszelkiej informacji, a tym bardziej takiej informacji, gdzie trzeba laczyc wiecej umiejetnosci niz tylko jedna. No i ci “slabi duchem”, maja bardzo slaba lub wcale umiejetnosc czytania ze zrozumieniem [umiejetnosc czytania + umiejetnosc rozumienia], wiec goto 1.