View Full Version : JAVA: algoritmo
tandrea851
18-11-2004, 22:43
mi servirebbe un algoritmo scritto in java o pseudocodice per trovare un numero tra una lista più vicino alla media di quest'ultimi..
esempio
9 6 3 10 2
media 6
numero più vicino alla media 6
qualche suggeritmento? grazie
mi sa che ti conviene farlo, non è difficile
tanto l'algoritmo è lineare, devi scorrere la lista due volte, prima per fare la media poi per far passare tutti gli elementi e scegliere il più vicino.
anzi, la lista la scorri una volta e un tot perché quando trovi un elemento uguale alla media (se c'è) puoi anche fermarti :)
tandrea851
18-11-2004, 23:15
Originariamente inviato da recoil
mi sa che ti conviene farlo, non è difficile
tanto l'algoritmo è lineare, devi scorrere la lista due volte, prima per fare la media poi per far passare tutti gli elementi e scegliere il più vicino.
anzi, la lista la scorri una volta e un tot perché quando trovi un elemento uguale alla media (se c'è) puoi anche fermarti :)
grazie, ma il problema è come implemenatarlo in codice..
il ciclo ke calcola la media è fatto.. mentre l'altro non mi funziona.. v posto il pezzo di codice magari qualcuno riesce a correggerlo..
double diff = 0;
double appoggio = 0;
for(i=0;i<valori.length;i++)
{
diff = media - (double) valori[i].getArea();
Math.abs(diff);
if(diff<=appoggio)
{
appoggio=diff;
valori[i]=proxMedia;
}
}
penso che questo assegnamento
valori[i]=proxMedia;
sia scorretto, dovrebbe essere il contrario, ovvero ti salvi il numero che fino a quelo momento e' piu' vicino alla media.
tandrea851
19-11-2004, 09:52
Originariamente inviato da kingv
penso che questo assegnamento
valori[i]=proxMedia;
sia scorretto, dovrebbe essere il contrario, ovvero ti salvi il numero che fino a quelo momento e' piu' vicino alla media.
azz vero.. cmq ho risolto cosi sembrerebbe.. provate a dargli un occhiata:
double[] differenze = new double[forme.length];
double minimo=Integer.MAX_VALUE;
Forma proxMedia=null;
for(i=0;i<forme.length;i++)
{
differenze[i] = Math.abs(media - (double) forme[i].getArea());
if(differenze[i]<=minimo)
{
minimo=differenze[i];
proxMedia=forme[i];
}
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.