Wyskakuje mi podobny błąd
W code blocksie wszystko działa poprawnie
#include
using namespace std;
int ile; //liczba testow
int zaproszeni; //liczba zaproszonych
int ciastka; //liczba ciastek w pudelku
int *czas=new int [zaproszeni];
int suma=0; //wszystkie ciastka
int paczki;
int main()
{
cin>>ile;
for(int j=1; j<=ile; j++)
{
cin>>zaproszeni>>ciastka;
for(int i=0; i<zaproszeni; i++)
{
cin>>czas[i];
suma+=(24*3600)/czas[i];
}
paczki=suma/ciastka;
if(suma%paczki!=0) paczki++;
cout<<paczki<<endl;
}
return 0;
}
int ciastka; //liczba ciastek w pudelku
int *czas=new int [zaproszeni];
Tablica czas
ma rozmiar 0. Musisz ją alokować i dealokować(delete) w pętli gdy wczytasz liczbę zaproszonych smakoszy.
Przeczytaj uwagi dla początkujących. Następnym razem wstaw poprawnie kod.
Witajcie,
czy ktoś może mi wskazać gdzie tu występuje błąd w tym kodzie, w kompilatorze kod jest poprawny, a jednak sędzia wskazuje błąd …
#include
#include
using namespace std;
int testy, obzartuch, czas, pudelka;
long long int ciastka;
double wynik=0;
double ile_ciastek (double);
int main()
{
cin>>testy;
for (int i=0; i<testy; i++)
{
{
cin>>obzartuch;
cin>>ciastka;
}
for (int j=0; j<obzartuch; j++)
{
cin>>czas;
}
cout<<ile_ciastek<<endl;
}
return 0;
}
double ile_ciastek (double wynik=0)
{
for (int k=0; k<obzartuch; k++)
{
wynik+= floor(86400/czas);
}
wynik= ceil(wynik/ciastka);
return wynik;
}
- Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!
- Z moich testow na tym kodzie wyniki nie sa poprawne.
- Powinno byc obliczenie ile ciastek zjadl kazdy obżrtuch zaraz po pobraniu czasu w jakim zjada ciastka. W kodzie wartosc jest nadpisywana.
Funkcja ile_ciastek niby powinna robic wszystko, ale nie dostaje wszystkich informacji. Program jest dosc krotki, moze udaloby sie obliczyc bez funkcji.
Poprawiłem kod, teraz już wszystko niby dobrze zlicza i wypisuje, ale jest jakiś problem z zaokrągleniami bo czasami przeskakuje wynik o 1 jednostkę - ma ktoś jakiś pomysł co może być błędnego w tym kodzie?
#include
#include
using namespace std;
int main()
{
int testy, obzartuch, czas, ciastka;
long double zjedli=0, paczki=0;
cin>>testy;
cin.ignore();
for (int i=0; i<testy; ++i)
{
cin>>obzartuch;
cin.ignore ();
cin>>ciastka;
cin.ignore ();
{for (int j=0; j<obzartuch; ++j)
{
cin>>czas;
cin.ignore ();
zjedli+=floor(86400/czas);
}
paczki= ceil(zjedli/ciastka);
cout<<paczki<<endl;
}
}
return 0;
A dlaczego powinna być zerowana? Wyliczam ile ciastek w ciągu doby zjada każdy obżartuch i to sumuje a następnie już za pętla ten zsumowany wynik przykładam do liczby ciastek w pudełku i powinna wyjść ilość paczek. I z grubsza wychodzi ale przy liczbach z zakończeniem kilka miejsc po przecinku coś nie zaokrągla jak powinien pomimo że dałem typ long double …
Myślę, ze Twój problem polega na tym, że nie przemyślałeś dokładnie podanych wskazówek i źle testujesz swój kod. Przecież Twój program nie daje poprawnego wyniku dla danych testowych. Zobacz jaki ciekawy wynik uzyskasz, gdy w danych testowych zmienisz kolejność podawanych danych na:
2
3 356
123
32999
10101
2 10
3600
1800
Wynik jest ko(s)miczny…
Przemyślałeś to co Ci napisała Yula?
Do każdego testu zmienna zjedli wchodzi z wartością z poprzedniego testu.
Tak więc Twój algorytm, może poprawnie liczyć tylko dla takiej sytuacji, gdy masz jeden przypadek testowy.
Dzięki wszystkim, faktycznie źle to obmyslilem z tymi pętlami. A co do innych kwestii to:
- testuję w Code blocks
- dałem long double bo myślałem że będzie dokładniej zaokraglal iloraz ale widzę że nie ma takiej potrzeby
- Cin ignore używam bo tak polecał w swoim kursie Drzewniak - czyli nie ma takiej potrzeby?
Cześć.
Jestem “mocno początkujący”, proszę o pomoc.
W Code::Blocks oraz ideone.com6 kod działa natomiast sędzia w spoj wyrzuca błąd wykonania (SIGSEGV).
#include
using namespace std;
int ile;
int main()
{
cin>>ile;
for(int i=1; i<=ile; i++)
{
float n,m;
cin>>n>>m;
int suma=0;
float t[3];
for (int i=0; i<n; i++)
{
cin>>t[i];
}
for (int i=0; i<n; i++)
{
suma+=(86400/t[i]);
}
int ip2;
float ip,ip3;
ip=suma/m;
ip2=ip;
ip3=ip-ip2;
if (ip3!=0)
{
ip2++;
}
cout<<ip2<<endl;
}
return 0;
}
Dziękuje za odpowiedź.
Przed napisaniem wiadomości przeczytałem post dla początkujących i starałem się postępować według tego co było tam napisane:
-
starałem się wyszukać rozwiązanie na forum zanim napisałem wiadomość ale nie znalazłem
-
nie założyłem nowego wątku tylko napisałem wiadomość już w istniejącym, dotyczącym tego problemu
-
wkleiłem kod według instrukcji (wkleiłem kod skopiowany z strony ideonem.com1 za pomocą ikonki kopiuj ponieważ, gdy wklejałem link to w mojej wiadomości nie pojawiał się on ani kod tylko taki obrazek:
-
nie obraziłem nikogo, byłem kulturalny i pisałem poprawnie
Jeżeli zrobiłem coś źle to nie jestem świadomy co zrobiłem źle i nadal będę to robił chyba że mnie uświadomisz albo wyrzućcie mnie po prostu z tego forum.
Jeżeli chodzi o mój kod to:
"…Co robi tablica t…" - przechowuje czasy pojedynczo zjedzonych ciastek.
"…i skąd się wziął jej rozmiar…" - rozmiar nadałem jej 3 ponieważ do wykonania programu podane są 2 testy w których są maksymalnie 3 czasy.
Rozumiem że sędzia testuje więcej więcej niż 3 czasy dlatego kod mój nie jest poprawny dlatego zmieniłem go tak (zastosowałem dynamiczne alokowanie pamięci) aby był możliwe stosowanie więcej niż 3 czasów. Nazwę zmiennej t zmieniłem też na nazwę czas. Niestety dostaje informacje “Błędna odpowiedź” pomimo, że wyniki testów w Code::Blocks są poprawne.
Podejrzewam, że napisałaś:
"skoro jesteś “mocno początkujący” to może przeczytaj post dla początkujących ?.."
dlatego, że źle wkleiłem kod więc wklejam nowy kod jako tekst bezpośrednio z Code::Blocks:
#include
using namespace std;
int ile,ip2,n;
float ip,m,ip3;
int main()
{
cin>>ile;
for(int i=1; i<=ile; i++)
{
cin>>n>>m;
int suma=0;
float *czas;
czas = new float [n];
for (int i=0; i<n; i++)
{
cin>>czas[i];
}
for (int i=0; i<n; i++)
{
suma+=(86400/czas[i]);
}
ip=suma/m;
ip2=ip;
ip3=ip-ip2;
if (ip3!=0)
{
ip2+=1;
}
cout<<ip2<<endl;
delete []czas;
}
return 0;
}
Proszę o pomoc.