sędzia zaakceptował ostatecznie program bez ingerencji w pętle, pozbyłem się tylko tablic i zastąpiłem je zmiennymi. @narbej , mógłbyś mi wytłumaczyć jaka jest różnica pomiędzy moim a twoim zapisem pętli?
@mariusz193 napisał, co powinieneś zrobić [poczytać podręcznik, literaturę]
Np:
dla N = 10
tab1 = new int[N];
tab1 jest indeksowana od zera, więc zawiera:
tab1[0],
tab1[1],
tab1[2],
tab1[3],
tab1[4],
tab1[5],
tab1[6],
tab1[7],
tab1[8],
tab1[9],
Skoro tak, to [poprawna] pętla też powinna "startować" od zera:
for (int i = 0; i < N; ++i){
.....
PS
Inna sprawa, że jak sam się przekonałeś i o czym też wspomniał @mariusz193 i wiele/kilka innych osób [w tym wątku], tablica/e są tu niepotrzebna/e ale z tablicami też można, ale należy się z nimi "zaprzyjaźnić" i nauczyć się z nimi "żyć".
PS 2
Błąd - niewielkie przekroczenie indeksu, [do tego dla bardzo małej tablicy] często nie spowoduje żadnego błędu i dlatego u Ciebie, przy normalnej kompilacji, wszystko wygląda ok, a w wynikowym programie indeksy nie są sprawdzane na przekroczenie zakresu. Na SPOJu jednak kompilacja nie jest "normalna" i dodawane jest [odpowiednia biblioteka] bardzo dokładne.sprawdzanie, czy nie wystąpiło przekroczenie indeksu.
PS 3
Dokładnie ten sam, wyżej opisany, problem występuje w obu waszych programach @grg1 i @mariusz_95
Też się dziwię, ale to tylko dlatego, że sedzia ma małą AI i IQ [iloraz inteligencji].
A serio, ilość linijek kodu nie jest dobrym miernikiem dobroci kodu i czymś czym powinieneś się przejmować i do czego bezwzględnie dążyć. Oczywiście jest ważne, aby kod był krótki i treściwy, łatwy do ogarnięcia jednym rzutem oka.
Muszę cię zmartwić, ja ten kod napisałem w 2 linijkach, mało czytelnie dla człowieka, ale wystarczająco dla sędziego. W formie bardziej czytelnej [dla człowieka] zajęło mi to 8 linijek w C++.
PS
Jeżeli interesują cIĘ TAKIE WYZWANIA [PISANIE JAK NAJKRÓTSZEGO KODU] TO TU JEST TAKIE MIEJSCE: http://www.spoj.com/SHORTEN/4
PS Sorry, włączył mi się niechcący capslock
Najprostszy chyba kod dla tego zadania:
using namespace std;
// Liczba sekund w 24h = 86 400
unsigned long int ZestawyTestowe;
unsigned int Doba = 86400;int main()
{
cin >> ZestawyTestowe;
long int Tablica[ZestawyTestowe];
for (int i=0; i<ZestawyTestowe; i++)
{
unsigned long int IleZje=0;
//deklaracja obzartuchow
unsigned long int Obzartuchy;
//deklaracja ile ciastek znajduje sie w pudelku
unsigned int CiastkaWPudelku;
//wprowadzamy ilosc obzartuchow i ile ciastek w pudelku
cin >> Obzartuchy >> CiastkaWPudelku;
for (int j=0; j<Obzartuchy; j++)
{
//deklaracja czasu
float Czas;
cin >> Czas;
IleZje+= floor(Doba/Czas);
}unsigned long int LiczbaPudelek = IleZje / CiastkaWPudelku; if (IleZje % CiastkaWPudelku !=0) { LiczbaPudelek++; } Tablica[i]=LiczbaPudelek; } for (int i=0; i<ZestawyTestowe; i++) { cout << Tablica[i] <<endl; } return 0;
}
A tu z funkcja:
using namespace std;
// Liczba sekund w 24h = 86 400
void LiczbaPudelek (long int ZestawyTestowe, long int *Tab)
{
unsigned int Doba = 86400;
for (int i=0; i<ZestawyTestowe; i++)
{
unsigned long int IleZje=0;
//deklaracja obzartuchow
unsigned long int Obzartuchy;
//deklaracja ile ciastek znajduje sie w pudelku
unsigned int CiastkaWPudelku;
//wprowadzamy ilosc obzartuchow i ile ciastek w pudelku
cin >> Obzartuchy >> CiastkaWPudelku;
for (int j=0; j<Obzartuchy; j++)
{
//deklaracja czasu
float Czas;
cin >> Czas;
IleZje+= floor(Doba/Czas);
}unsigned long int LiczbaPudelek = IleZje / CiastkaWPudelku; if (IleZje % CiastkaWPudelku !=0) { LiczbaPudelek++; } Tab[i]=LiczbaPudelek;
}
}int main()
{
unsigned long int ZestawyTestowe;
cin >> ZestawyTestowe;
long int Tablica[ZestawyTestowe];
LiczbaPudelek(ZestawyTestowe, Tablica);
for (int i=0; i<ZestawyTestowe; i++)
{
cout << Tablica[i] <<endl;
}return 0;
}
Witam,
Jestem nowy na tym serwisie i jeszcze nie wiem jak konkretnie dziala tutaj ten sedzia.
Do zadania obzartuchy przeslalem swoja odpowiedz natomiast sedzia wyrzucil blad sigsegv tzn blad o naruszeniu ochrony pamieci ale przegladajac pare razy kod nigdzie nie widze mozliwosci tego bledu, w code::blocks oczywiscie wszystko dziala.
Moge prosic o pomoc czy jednak mam cos zle w kodzie czy raczej wybieram zle jezyk z roznych dostepnych c++
#include
#include
using namespace std;
int main()
{
int n,test,sumaa,w_pudelku,sekundy[3],kupicc,ciastka[3] ;
float kupic;
cin>> test;
for(int x=0;x<test;x++)
{
cin>>n;
cin>> w_pudelku;
for(int i=0;i<n;i++)
{
cin>>sekundy[i];
ciastka[i] = 86400 / sekundy[i];
ciastka[i] = floor(ciastka[i]);
sumaa += ciastka[i];
if(i==n-1)
{
kupic = sumaa/ w_pudelku;
kupicc = ceil( kupic);
cout<< kupicc<< endl;
}
}
sumaa=0;
}
return 0;
}