100 / 153
Oct 2018

a dlaczego miałby ci dać AC, skoro masz niezgodność wyniku dla przykładowych danych ?
najpierw doprowadź do zgodności, a dopiero potem proś o pomoc

masz prosty program oraz proste dane przykładowe, dla których otrzymujesz zły wynik - więc masz szansę samodzielnie znaleźć błąd :slight_smile:

ja zaś nie ma zwyczaju rozwiązywać cudzych problemów - co najwyżej je wskazuję :slight_smile:

wracając do zadania:
Example
Input:
3
4 1 2 3 4
4 4 3 2 1
4 0 3 2 4

Output:
2
3
2

Przecież trzecia tablica 4 0 3 2 4 suma to: 13, a średnia arytmetyczna to: 13/5= 2.6, ZATEM PIERWSZY ELEMENT TABLICY, który spełnia warunki zadania to 3 a nie 2.
A wy Panowie jak rozumiecie zadanie, bo nie wiem czemu jest tam 2?

Poprawnie.

W kolejnych liniach, dla każdego testu, liczba 0 < n < 100 i n liczb całkowitych dodatnich nie większych niż 100.

Czyli
4 1 2 3 4
4 4 3 2 1
4 0 3 2 4

w każdym z powyższych wierszów czwórka to ilość liczb jaka nastąpi za chwilę.

Średnią liczymy z liczb: 0 3 2 4

19 days later
19 days later

Witam!
kod: https://pastebin.com/QpC6GpB51

Mam problem z tym, że dla ciągu liczb 4 1 2 3 4 i 4 4 3 2 1 coutput to 2. A według zadania dla 4 4 3 2 1 output to 3.

Jeżeli zmienne sa zapisane tylko jako int to średnia z 2.8 zmienia sie na 2, dlatego najbliżej jest 2.
Przy float ach średnia równa sie 2.8 dlatego bliżej jest 3.

Mam z tym straszny problem jak to zgrabne zapisać żeby nie było za długie, jakieś rady?

Nie przeczytałeś tego wątku, prawda?
Jest tutaj test którego nie przechodzisz i to widać z oddali.

@redysz

Dzięki za odpowiedź, doceniam twój czas.

Gdy u mnie wpisuje liczby z zadania wszystko działa (Ale skoro u w twoim teście nie działa to oczywiste jest że jest źle! ale nie wiem co jest nie tak.

najpierw wpisuje 3 (ilosc operacji) pętla for zależna od wpisanej wartości
następnie wpisuje 4 (ile liczb podam do obliczen) tablica o pojemności wpisanej liczby
następnie wpisuje 1 2 3 4 (liczby do operacji) zwykle zmienne

Wszystko działa nie ważne jak wpiszesz, czy po sobie czy w kolumnie itp

Nie mam pojęcia czemu w twoim teście dało takie wyniki :frowning:

  1. Testuj w ideone, a nie u siebie
  2. Tak się dzieje bo masz inny kompilator / inne coś / a masz błąd w kodzie i następuje tzw. undefined behaviour (w zależności od kompilatora może stać się różna rzecz - problem może być różnie obsłużony).
  3. Łatwo zauważyć co (i jak bardzo) masz źle dla innych danych z tego wątku.

Gdzie jest Twoje undefined behaviour? W zasadzie wszędzie, polecam jakiś kurs, dobrą książkę najpierw przerobić zanim zaczniesz robić te zadania. Przykład:

int gruszka=0;
float tablica [gruszka];

Na prawdę chciałeś stworzyć zeroeleementową tablicę?

I co wtedy robi to:

for (int i=0; i<gruszka; i++)
{
    cin>>liczba;
    tablica [i]=liczba;
}

Wstawia dane w i-te miejsce zeroelementowej tablicy? Cud, że działa w ogóle.

Edit: Powyższe jednak nie jest Twoim największym problemem, a jakość kodu. Kod jest tak brzydki, że nie możesz się w nim połapać i nikt kto nie jest zawodowym programistą się nie połapie. Zapamiętaj raz na zawsze: napisanie ładnego kodu jest ważniejsze od tego by on poprawnie działał. Jak działa niepoprawnie, a jest czysty to szybko błąd można naprawić, jak działa poprawnie, ale jest taki jak Twój to przy najdrobniejszej zmianie się rozjedzie.

Edit2: Tak dla podkreślenia powtórzę: najważniejsze żeby kod był ładny. Później ewentualnie może działać.

Dzięki za rady, już zabieram się za poprawę. Co do zero elementowej tablicy, na początku pętli nadajemy wartość dla int gruszka i wszystko działa. Mam rozumieć że błędem jest początkowe definiowanie gruszka = 0 i zmienianie tego 0 na inna liczbę?

Nie. Błąd jest w tym, że definiujesz gruszka = 0 i w następnej linii tworzysz tablicę o rozmiarze gruszka. Nigdzie pomiędzy nie nadajesz jej wartości (dopiero po stworzeniu zeroelementowej tablicy).
Wkleiłem stricte dwie linie Twojego kodu. Dajesz gruszka=0 i od razu stwórz tablicę o rozmiarze gruszka. Widzisz to?

Jeśli chcesz stworzyć tablicę a dopiero potem nadać jej rozmiar to są trzy wyjścia:

  1. zastosować vector: https://en.cppreference.com/w/cpp/container/vector:2
    vector tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica.resize(rozmiar);

  2. zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
    float *tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica = new float[rozmiar];

  3. stworzyć na początku tablicę o rozmiarze którego na pewno nie przekroczysz, treść zadania podaje że masz do zsumowania maksymalnie 99 liczb więc 100 elementowa tablica wystarczy:
    float tablica[100];
    a potem indeksować od zera do wartości rozmiar.

PS. stosuj “normalne” nazewnictwo, jak ktoś zobaczy w kodzie banan = gruszka/jablko; - to może później nie wiedzieć co toto wogle robi.

Wielkie dzięki! Zastosuje się do tych możliwości. I tak przestane robić taki bałagan w kodzie, to nie ma sęsu gdy do niego się wróci po x czasie.

Napisałem kod od nowa, poprawiając tablice według waszych rad.
Również kod przechodzi test https://ideone.com/xYG3hh10

Sędzia SPOJ mimo to go odrzuca, mógłby ktoś mnie naprowadzić na odpowiedź?

  1. nie używaj float tylko double (przynajmniej na SPOJu i w większości przypadków w życiu)
  2. podejscia nie są typu double. Robisz o zgrozo niejawną konwersję i jak zawsze w takich przypadkach prosisz się o guza przez błędy precyzji
  3. co z delete[]?