Średnia arytmetyczna

2010-11-30 11:03
zai55xa
0

Witam!
Mam problem z takim zadankiem ze spoja:
https://pl.spoj.pl/problems/PP0604A/

Napisałem taki program:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        static int n, suma, srednia, najm;
        static int tab[100];
        cin >> n;
        for(int i=0; i<n; i++)
        {
            cin >> tab[i]; // wczytuje liczby i zwiekszam zmienna suma, ktora ma miec na koncu wartosc sumy wszystkich elementow tej tablicy
            suma+=tab[i];
        }
        srednia = suma/n; // tworze srednia arytmetyczna n liczb
        najm = abs(tab[0] - srednia); //niech na poczatku liczba, ktorej wartosc jest najblizsza sredniej bedzie tab[0]
        for(int i=1; i<=n; i++)
        {
            int as = abs(tab[i] - srednia); // zmienna pomocnicza as przechowuje wartosc bezwzgledna z roznicy wartosci danego elemetny tablicy i sredniej 
            if(as < najm) // jesli ta roznica jest mniejsza niz dotychczasowa
                najm = tab[i]; // to nowa liczba ktorej wartosc jest najblizsza sredniej to tab[i]
        }
        cout << najm << endl; // wypisuje zmienna
    }
    return 0;
}

Program prawidłowo się kompiluje, ale źle działa, dla przykładowych danych daje takie wyniki:

0
1

Proszę o pomoc i poprawienie kodu ;_)

Pozostało 580 znaków

2010-11-30 11:32
0
  1. co to za static?
  2. int/int = int, czyli 1/2 = 0 (i 1 reszty). Żeby dzielić zmiennoprzecinkowo musisz rzutować na floata coś, np.
    double(suma)/n;

Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2010-11-30 12:34
autor2
0

Już sobie poradziłem, dzięki!

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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