Dzieje się tak ponieważ operujesz na liczbach całkowitych. W działaniu:
w*hist[i+10]/max
wszystkie zmienne są całkowitoliczbowe, więc wynikiem też będzie liczba całkowita. Teraz pomyśl jak w C++ działa operacja dzielenia na liczbach całkowitych (możesz na przykład przetestować jaki będzie wynik działania 3/2
).
Jeśli chodzi o porady jak naprawić Twój program, odsyłam do zbioru wskazówek ze strony AlgoLigi (w tym przypadku chyba najbardziej przydatny będzie czwarty punkt, chociaż sądzę, że inne punkty też będą dla Ciebie ciekawe): https://www.spoj.com/ALGOLIGA/embed/info
Podsumowując: round ma się dobrze, wina leży po stronie użytkownika 