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
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;
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.
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;
}
}
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
W związku z tym nie mogę go uruchomić. Czytam więc pobieżnie i hm... upiekło Ci się 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ć?
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;
}
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.