Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wartość najbliższa średniej arytmetycznej, spoj

Ostatnio zmodyfikowano 2017-12-23 18:13
Autor Wiadomość
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:
C/C++
#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/
P-168080
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.
P-168081
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.
P-168082
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:
C/C++
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
P-168084
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
P-168085
« 1 »
  Strona 1 z 1