25 / 54
May 2017

ta sama uwaga co powyżej

a tak w ogóle, to po co wam te tablice ? - żeby program wyglądał ładniej ? bardziej profesjonalnie ? czy jakikolwiek inny niezrozumiały dla mnie powód ?

i jaki jest powód użycia float/double w programie, gdzie wystarczają operacje na int

Chciałem użyć takiej tablicy, żeby program nie rezerwował niepotrzebnie tyle pamięci, a typu double użyłem, żeby uzyskać dokładny wynik dzielenia. Nie bardzo rozumiem Twoją radę, mógłbyś jaśniej?

floata użyłem, ponieważ wartość mogła wyjść w ułamku który potem jest zaokrąglany w górę/dół, a tablice do przechowywania wyników (a w momencie jak piszę te słowa to dotarło do mnie, że chyba mam sposób na zrobienie tego bez tablicy :P)

mały błąd w powyższej linii.

Nie jakiś, tylko bardzo konkretny, SIGABORT, a powodem jest, jak wyżej, mały błąd w poniższej linii twojego kodu:
for (int j = 1; j <= N; j++)

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

Już wszystko rozumiem, dziękuję bardzo za dokładne wytłumaczenie :slight_smile:

1 month later

Kolego migron, na tym forum nie wstawiamy działających kodów,to jest forum szkoleniowe tu się uczymy pisać programy, a nie kopiuj wklej.
Proszę usunąć kod !

Też się dziwię, ale to tylko dlatego, że sedzia ma małą AI i IQ [iloraz inteligencji]. :wink:

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

1 month later

Nie rozumiem dlaczego w pierszym teście nie zaokrągla
do 8 ktoś pomorze ?

a ja nie rozumiem, dlaczego oczekujesz, że wartość całkowitą zaokrągli ci w górę

usuń linki do swoich programów - na forum nie powinno być dobrych lub prawie dobrych rozwiązań - niech inni pracują samodzielnie :slight_smile:

7 months later

Cześć!
Czy ma ktoś pomysł co jest nie tak w moim rozwiązaniu? Próbowałam różnych metod, ale utknęłam w martwym punkcie i nie wiem co zrobić. Zamiast 8 pudełek w 1 teście uporczywie wyświetla się 7…

Będę wdzięczna za każdą uwagę.

proponuję abyś wróciła do podręcznika C/C++ i powtórzyła początkowe rozdziały: podstawowe typy danych i działania arytmetyczna na nich.

7 months later

cześć,
moje pierwsze samodzielne zadanie na SPOJu, może się komuś przyda - a propos zmiennych globalnych i lokalnych: sędzia nie przyjął mojego rozwiązania (błąd kompilacji), a po włożeniu zmiennych globalnych do środka - przyjął… (?)

[SPOJ] “Przyjął” nie dlatego, że zmieniłeś zmienne globalne na lokalne. Nie ma to zupełnie żadnego znaczenia i dobrze napisany program ze zmiennymi globalnymi tak samo jak dobry program ze zmiennymi lokalnymi, zawsze dostanie AC.

Po prostu przy okazji “wkładania” poprawiłeś inny/inne błąd/błędy.

2 years later

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;

}

Możesz zdradzić po co zamieściłeś tutaj to coś?