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?
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?
update
kod https: https://pastebin.com/JRVAn1Lg5
Udało mi się to poprawić, mimo to dalej mi odrzuca jakieś rady?
Przepraszam za syf w kodzie ale strasznie długo przy tym siedzę.
a z resztą testu z zadania też nie przechodzisz: https://ideone.com/OcD6fr9. W zasadzie to żadnego testu nie przechodzi. Ten program na pewno miał rozwiązywać to zadanie?
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
- Testuj w ideone, a nie u siebie
- 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).
- Ł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ć.
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:
-
zastosować vector: https://en.cppreference.com/w/cpp/container/vector:2
vector tablica;
int rozmiar;
cin >> rozmiar;
tablica.resize(rozmiar); -
zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
float *tablica;
int rozmiar;
cin >> rozmiar;
tablica = new float[rozmiar]; -
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.
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ź?