41 / 192
Feb 2016

Hej, dzieki wielkie za pomoc. Błąd okazał się błachy i faktycznie chodziło o 'czyszczenie' tablicy na koncu, czyli innymi słowy o przwrócenie sumie wartości 0. Co do użycia floor się nie zgodzę, bo w zadaniu jest napisane również, że obżartuchy nie mogą rozpocząc kolejnego ciastka jeśli nie ma pewności, ze je skończą w ciągu dobry, dlatego też użyłem floor, żeby tego uniknąć.

19 days later

#include <iostream>
using namespace std;
int main()
{
unsigned short test, ilu;
unsigned long long ciastek;
cin>>test;
for (int i=0;i<test; i++)
{
cin>> ilu >> ciastek;
unsigned short suma=0,sekund;
for (int i=0; i<ilu;i++)
{
cin>> sekund;
suma+=(86400/sekund);
}
suma/=ciastek;
if (suma%ciastek<=0,5)
suma++;
cout<< suma<< endl;
}
return 0;
}

Witam co z tym kodem jest nie tak u mnie na VS 2012 dobrze działa jak również na ideone.

Zmieniłem if (suma%ciastek<=0,5) na if (suma%ciastek !=0) ale sędzia i tego rozwiązania nie przyjmuje może jakaś sugestia żebym wiedział co poprawić?

  1. Strukturę programu - wcięcia w kodzie.
  2. Typy zmiennych
  3. Nazwy zmiennych
  4. Na początek pisz prosto,
  5. Nie używaj tej samej zmiennej do kilku rzeczy [oczywiście nie mam na myśli zmiennej i - ta jest ok. suma [lepiej sumaZjedzonychCiastek. Więc nie suma /= ciastek tylko: ilePudelek = sumaZjedzonychCiastek / ciastekWpudelku. A potem if (sumaZjedzonychCiastek % ciastekWpudelku != 0 ) ilePudelek++

Jeżeli będziesz pisał tak jak teraz, nie tylko Ty ale i nikt inny nie będzie widział, albo będzie trudno znaleźć błąd - czy już go teraz widzisz?

12 days later

Witam,

czy liczba pudełek powinna być liczona dla każdego obżartucha osobno czy najpierw liczę sumaryczną liczbę ciastek a później zaokrąglam do liczby ciastek w pudełku?

Pozdrawiam

Obżartuchy dostają ciastka a nie całe pudełka, wiec zaokrąglasz do pudełek po ustaleniu ile ciastek łącznie zjedzą.

include

using namespace std;

int ile_razy;
int main()
{
cin>>ile_razy;
for(int b=0; b {
int N=0,M=0,t=0,suma_ciastek=0,suma_pudelek=0, t_ciastko=0,grubas=0; //N ilosc grubasow, M ilosc ciastek
t=60*60*24; //wynik w "s"

 cin>>N>>M;
 t_ciastko= new int[N];
 grubas= new int[N];
 for(int i=0; i<N; i++)
   {
      cin>>t_ciastko[i];
      grubas[i]=t/t_ciastko[i];            //ilosc ciastek jakie zje
      suma_ciastek+=grubas[i];
      suma_pudelek=suma_ciastek/M;



   }

   if(suma_ciastek%M!=0)
        suma_pudelek++;
  cout<<suma_pudelek;

}

return 0;

}

Problem wyglada tak. Działac dziala, zadneg bledu nie wywala, u mnie wyniki mam dobre jak sprawdzam, ale testu przejsc nie chce. Na poczatku myslalem ze moze chodzi o zaokraglanie,bo zawsze zaokragla w dol, no ale jednak nie.

A dokładnie, jak to dokładnie sprawdzasz?

delete[]
Nie zapominaj o tym. Deklarowanie zmiennych globalnych jest uważane za złą praktykę, a w tak małych programach nie ułatwia w żaden sposób pisania. Najlepiej deklarować zmienne w miejscu gdzie są potrzebne.
Po co ci te ułamki? Żeby zrozumieć co tam napisałeś musiałem przeformatować u siebie kod do jakiejś bardziej czytelnej formy.
Popracuj nad kodem. Nad czytaniem poleceń też (uczestników jest 2-3?).
Najlepiej usuń to wszystko, przeczytaj parę razy polecenie i napisz to od nowa :smiley:

dopisuje linijke co by mi wyswietlalo ile pudelek jest potrzebnych po napisaniu kazego czasu jedzenia, potem biore kartke,dlugopis,kalkulator i sam licze.

Sam korzystam i sam zalecam taką metodę - kartkę, ołówek, http://www.wolframalpha.com/20 <-- kalkulator, geogebra <- rysowanie punktów i figur itd. Niestety błąd jaki tu popełniasz, najłatwiej zobaczyć, testując na danych przykładowych z zadania, testując <- "podając" dane z pliku, a nie z "ręki". Możesz to robić u siebie - przekierowując wejście lub na ideone.com wklejając i kod i dane wejściowe, a potem porównując swoje wyjście [na ideone.com] z poprawnym wyjściem podanym w zadaniu.

Każdy inny sposób testowania, nie pokaże CI tego paskudnego błędu, a wiem co mówię, bo znalazłem, poprawiłem i zaliczyłem, po raz enty, twoim poprawionym kodem, to zadanie.

Dobra, dziei, bede probowal. Ale mam jeszcze jedno pytanie. W poleceniu jest napisane zeby wyniki podawalo po wprowadzeniu wszystkiego. Wiec wynik trzeba gdzies zapisac a potem to gdzies wyswietlic. No ale wywala mi blad : Błąd wykonania (SIGSEGV). No i moje pytanie brzmi co to znaczy. Z tego co czytalem to jest cos z miejscem w pamieci czy cos, no ale mój angielski niestety nie jest na takim poziomie zeby zrozumiec o co dokladnie chodzi.

Naprawdę? Przecież, w tej wersji, którą podałeś tu na forum tego błędu nie było. Błąd SIGSEGV jest powodowany tym, że program "wychodzi" poza dozwolony obszar pamięci. Tak naprawdę nie musiałeś nic tablicować, lecz liczyć na "bieżąco" i na bieżąco podawać wynik. Wczytujesz dane do jednego testu, piszesz odpowiedź, wczytujesz drugi test, wypisujesz odpowiedź i td.

PS
Żeby oszczędzić sobie dalszych odpowiedzi a Tobie pytań. Dopisz po prostu, w odpowiednim miejscu ..... << endl;

Nie w tym kodzie. Troche go zmienielm i dopiero wtedy mi wyskakiwal. Ale dzieki za odpowiedz.

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ź.