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

[SPOJ] Problem z zadaniem: Średnia arytmetyczna

Ostatnio zmodyfikowano 2012-01-11 21:04
Autor Wiadomość
jsc
Temat założony przez niniejszego użytkownika
[SPOJ] Problem z zadaniem: Średnia arytmetyczna
» 2012-01-11 18:03:27
Treść zadania brzmi:
W tablicy n liczb całkowitych dodatnich znajdź tę, której wartość jest najbliższa warości średniej z wszystkich liczb.
Input

Najpierw t - liczba testów. W kolejnych liniach, dla każdego testu, liczba n<100 i n liczb całkowitych dodatnich nie większych niż 100.
Output

Dla każdego testu, w kolejnych liniach, jedna liczba - pierwszy element tablicy, którego wartość jest najbliższa wartości średniej.

W odpowiedzi napisałem o to program:
C/C++
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

typedef int kontrolna;

typedef int liczba;

int main()
{
    kontrolna iloscTestow;
    kontrolna ktoryTest;
   
    cin >> iloscTestow;
   
    for( ktoryTest = 0; ktoryTest != iloscTestow; ktoryTest++ )
    {
        kontrolna iloscLiczb;
       
        cin >> iloscLiczb;
        vector < liczba > tablica;
        liczba sumaLiczb = 0;
        liczba biezaca;
       
        for( liczba ktoraLiczba = 0; ktoraLiczba < iloscLiczb; ++ktoraLiczba )
        {
            cin >> biezaca;
           
            tablica.push_back( biezaca );
            sumaLiczb = sumaLiczb + biezaca;
        }
       
        float sredniaLiczb = static_cast < float >( sumaLiczb ) / iloscLiczb;
       
        liczba znanaLiczbaPrzyblizajaca = tablica[ 0 ];
       
        if( floor(( abs( znanaLiczbaPrzyblizajaca - sredniaLiczb ) ) ) != 0 )
        {
            for( vector < liczba >::iterator jakaLiczba = tablica.begin(); jakaLiczba < tablica.end(); ++jakaLiczba )
            {
                if( abs( sredniaLiczb - * jakaLiczba ) < abs( sredniaLiczb - znanaLiczbaPrzyblizajaca ) )
                {
                    znanaLiczbaPrzyblizajaca = * jakaLiczba;
                   
                    if( floor( abs( znanaLiczbaPrzyblizajaca - sredniaLiczb ) ) == 0 )
                    {
                        break;
                    }
                }
            }
        }
       
        cout << znanaLiczbaPrzyblizajaca << endl;
    }
    return 0;
}

Według moich testów program jest prawidłowy, a sędzia odrzuca go ze względu na złe wyniki.
P-47953
pekfos
» 2012-01-11 20:36:13
Złe testy pewnie.

Btw:
C/C++
typedef int kontrolna;
typedef int liczba;
Po co utrudniać sobie życie?
P-47969
jsc
Temat założony przez niniejszego użytkownika
» 2012-01-11 20:54:16
Jeśli się czepiasz testów to masz:
Wejście:

4
4 1 2 3 4
4 4 3 2 1
6 2 7 8 3 1 3
5 1 2 4 7 9

Wyjście

3
2
3
4
P-47971
pekfos
» 2012-01-11 21:00:17
tak pobieżnie patrząc zauważyłem że zaokrąglasz przez floor(). zmień na round().
P-47976
DejaVu
» 2012-01-11 21:00:52
Ale skompilowałeś ten program :P
P-47978
jsc
Temat założony przez niniejszego użytkownika
» 2012-01-11 21:04:38
tak pobieżnie patrząc zauważyłem że zaokrąglasz przez floor(). zmień na round().

A rzeczywiście...
P-47979
« 1 »
  Strona 1 z 1