Średnia arytmetyczna

0

Witam! Kolejne zadanie z którym się zmagam, powinno wypisać pierwszy element tablicy, którego wartość jest najbliższa wartości średniej. Na początku liczba testów, a w każdym teście liczba podanych liczb :D I mam takie pytanie, dlaczego w 23 linijce, nie działa symbol "<"? Np dla liczb:
1
5 10 14 2 2 2
wypisuje 2 zamiast 10. I nie mam pojęcia dlaczego, ponieważ 4.00000 nie jest większe od 4.00000 :O Jak zwykle proszę o pomoc i poradę :)

 #include<stdio.h>

int main(void)
{
    int t,n,i,wynik;
    double war[110],srednia,nap[110];
    
    scanf("%d",&t);
    while(t--){
        srednia=0;
        scanf("%d",&n);
        for(i=0;i<n;i++){
            scanf("%lf",&nap[i]);
            srednia=srednia+nap[i];
        }
        srednia=srednia/n;
        for(i=0;i<n;i++){
            if(srednia>=nap[i])war[i]=srednia-nap[i];
            else war[i]=nap[i]-srednia;
        }
    wynik=0;
    for(i=1;i<n;i++){
        if(war[i]<war[i-1])wynik=i;
    }
printf("%d\n",(int)nap[wynik]);
    }
    return 0;
}
1
#include <stdio.h>
#include <math.h>
 
int main()
  {
   int t,n,i,suma,tb[110];
   scanf("%d",&t);
   while(t--)
     {
      scanf("%d",&n);
      for(suma=0,i=0;i<n;suma+=tb[i++]) scanf("%d",&tb[i]);
      for(p=0,i=1;i<n;++i) if(abs(n*tb[p]-suma)<abs(n*tb[i]-suma)) p=i;
      printf("%d\n",tb[p]);
     }
   return 0;
  }
0

Mimo że wprowadziłem bibliotekę stdlib, dla tamtego testu wypisało 14 :O A mógłbyś wytłumaczyć, dlaczego tamto rozwiązanie jest błędne? Bo nie mogę ogarnąć dlaczego przy war[i]=4.00000 i war[i-1]=4.00000 wypisuje że war[i-1] jest większe...

0

Bo średnia nie wyszła ci 6 tylko 6.0000000000000000000001

0

Jejuuu mój głupi błąd :)
Było tak:

  wynik=0;
    for(i=1;i<n;i++){
        if(war[i]<war[i-1])wynik=i;

A powinno być:

 wynik=0;
    for(i=1;i<n;i++){
        if(war[i]<war[wynik])wynik=i; 

Ale i tak obeszło się bez double dzięki postowi Dragona :)
Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1