Wartość najbliższa średniej arytmetycznej, spoj
Ostatnio zmodyfikowano 2017-12-23 18:13
Bercik97 Temat założony przez niniejszego użytkownika |
Wartość najbliższa średniej arytmetycznej, spoj » 2017-12-23 13:25:00 Witam, nie wiem dlaczego nie działa mój kod. Po wpisaniu liczb program ma obliczyć średnią z tych liczb i wypisać liczbę z pośród podanych, która jest najbliższa obliczonej średniej. Jeśli dwie liczby mają taką samą odległość do średniej to wybierana jest ta, która została wprowadzona do tablicy pierwsza. Proszę o pomoc. edit: #include <stdio.h> #include <math.h> #define N 100
int main() { int t, n, k[ N ] = { }, j, naj; double srednia, w[ N ] = { }; scanf( "%d", & t ); while( t != 0 ) { srednia = 0; scanf( "%d", & n ); for( j = 0; j < n; j++ ) { scanf( "%d", & k[ j ] ); srednia += k[ j ]; } srednia /= n; naj = k[ 0 ]; for( j = 0; j < n; j++ ) w[ j ] = fabs( srednia - k[ j ] ); for( j = 0; j < n; j++ ) if( w[ j ] < w[ j - 1 ] ) naj = k[ j ]; printf( "%d\n", naj ); t--; } return 0; }
http://pl.spoj.com/problems/PP0604A/ |
|
Monika90 |
» 2017-12-23 14:21:22 Powinieneś dać link do zadania, a nie link do obrazka z zadaniem, nie wszyscy mogą przeczytać tekst z obrazka. Kod powinien być wklejony na forum.
A samo zadanie rozwiąż używając tylko liczb całkowitych i nie używając dzielenia. |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-23 14:33:20 Jak mam to zrobić nie używając dzielenia? Przecież muszę policzyć jakoś średnią w typie zmiennoprzecinkowym. |
|
Monika90 |
» 2017-12-23 14:44:50 Wcale nie musisz, zamiast szukać liczby najbliższej średniej, możesz szukać liczby która pomnożona przez n będzie najbliższa sumy. Dzięki temu błędy zaokrągleń podczas wykonywania operacji zmiennoprzecinkowych nie będą miały znaczenia. Z resztą być może problemem u ciebie są nie błędy zaokrągleń, tylko po prostu błędny algorytm. Ta pętla na pewno jest błędna: for( j = 0; j < n; j++ ) if( w[ j ] < w[ j - 1 ] ) naj = k[ j ];
Gdy j jest równe zero to indeks jest poza zakresem tablicy w |
|
Bercik97 Temat założony przez niniejszego użytkownika |
» 2017-12-23 18:13:37 Ok, zrobiłem tym twoim sposobem :D już wychodziłem z siebie, kilka godzin ogólnie siedziałem nad tym zadaniem aż wreszcie sędzia mi zaliczył :D ps. ten standardowy sposób też był spoko bo patrzyłem na kod innych ludzi to większość tak robiła ale ten twój pomysł na algorytm @Monika90 jest przyjemniejszy na pewno, dzięki ;) https://ideone.com/RJwsp5 |
|
« 1 » |