• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

srednia arytmetyczna spoj blad

Aruba Cloud - Virtual Private Server VPS
0 głosów
251 wizyt
pytanie zadane 16 lutego 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)

Cześć wiecie oze dlaczego sedzia wywala błąd wszystkie wyniki do sprawdzenia sa oki

wyniki są dobre

#include <iostream>
#include <cmath>
#include <cstdlib>


using namespace std;


int main() {
    int t;
    int ile;
    cin>>t;
    for(int i=0; i<t; i++) {
        cin>>ile;
        double *a = new double [ile];
        double *b = new double [ile];
        double c=0;
        double srednia=0.0;
        for(int i=0; i<ile; i++) {
            cin>>a[i];
            c+=a[i];

        }
        srednia = c/ile;

        for(int i=0; i<ile; i++) {

            b[i] = abs(srednia - a[i]);
        }

        double m = b[0];
        double wynik;
        for(int i=1; i<ile; i++) {
            if(b[i] < m) {
                m = b[i];
                wynik = a[i];
            }
        }
        cout  << wynik << endl;

        delete [] a;
        delete [] b;

    }
    return 0;
}

 

komentarz 16 lutego 2019 przez RafalS VIP (122,820 p.)
link do zadania na spoj?
komentarz 16 lutego 2019 przez Michał_Warmuz Mądrala (5,830 p.)

https://pl.spoj.com/problems/PP0604A/

Oraz kod który poprawiłem i który nadal nie akceptuje sedzia

#include <iostream>
#include <cmath>
#include <cstdlib>


using namespace std;


int main() {
    int t;
    int ile;
    cin>>t;
    for(int i=0; i<t; i++) {
        cin>>ile;
        int *a = new int [ile];
        int *b = new int [ile];
        double c=0.0;
        double srednia=0.0;
        for(int i=0; i<ile; i++) {
            cin>>a[i];
            c+=a[i];

        }
        if(c == 0 ) srednia = 0;
        else srednia = c / ile;

        for(int i=0; i<ile; i++) {

            b[i] = abs(srednia - a[i]);
        }

            int m = 1000;
            double wynik;
            if(srednia == 0) wynik = 0;
            else {
                for(int i=0; i<ile; i++) {
                    if(b[i] < m) {
                        m = b[i];
                        wynik = a[i];
                    }
                }
            }
            cout  << wynik << endl;

        delete [] a;
        delete [] b;

    }
    return 0;
}


 

1 odpowiedź

+1 głos
odpowiedź 16 lutego 2019 przez RafalS VIP (122,820 p.)
wybrane 16 lutego 2019 przez Michał_Warmuz
 
Najlepsza

Jeśli wynikiem jest pierwsza liczba to wypisujesz smieci:

		double wynik;
		for (int i = 1; i < ile; i++) {
                    ...
		}
		cout << wynik << endl;

 

komentarz 16 lutego 2019 przez Michał_Warmuz Mądrala (5,830 p.)

poprawiłem na cos takiego teraz jest oki ?

#include <iostream>
#include <cmath>
#include <cstdlib>
 
 
using namespace std;
 
 
int main() {
    int t;
    int ile;
    cin>>t;
    for(int i=0; i<t; i++) {
        cin>>ile;
        int *a = new int [ile];
        int *b = new int [ile];
        double c=0.0;
        double srednia=0.0;
        for(int i=0; i<ile; i++) {
            cin>>a[i];
            c+=a[i];
 
        }
        if(c == 0 ) srednia = 0;
        else srednia = c / ile;
 
        for(int i=0; i<ile; i++) {
 
            b[i] = abs(srednia - a[i]);
        }
 
            int m = 1000;
            double wynik;
            if(srednia == 0) wynik = 0;
            else {
                for(int i=0; i<ile; i++) {
                    if(b[i] < m) {
                        m = b[i];
                        wynik = a[i];
                    }
                }
            }
            cout  << wynik << endl;
 
        delete [] a;
        delete [] b;
 
    }
    return 0;
}

 

komentarz 16 lutego 2019 przez RafalS VIP (122,820 p.)

Dobra mam. Chryste Panie ile szukania

int *b = new int[ile];

gdyby ta tablica miala lepszą nazwe to od razu byś zauważył, że roznice_wzgledem_sredniej powinne byc typu double.

A te ify:

if(c == 0 ) srednia = 0;

są bez sensu bo zero podzielone przez cokolwiek roznego od zera daje zero. A dzielisz przez ilosc liczb, która zgodnie z treścią zadania będzie zawsze co najmniej jedynką.

Polecam zacząć korzystać z kontenerów i alorytmów. Napisałem sobie to dla testu:

#include <algorithm>
#include <vector>
#include <cmath>
#include <numeric>
#include <iostream>
using namespace std;


int main() {
	int data_sets, n;
	cin >> data_sets;
	for (int i = 0; i < data_sets; i++) {
		cin >> n;
		std::vector<int> numbers(n);
		for (size_t j = 0; j < n; j++)
		{
			cin >> numbers[j];
		}
		double mean = accumulate(numbers.begin(), numbers.end(), 0.0) / n;
		cout << *min_element(numbers.begin(), numbers.end(), [mean](int x, int y) {
			return abs(x - mean) < abs(y - mean); 
		}) << endl;
	}
	return 0;
}

i w pythonie:

for _ in range(int(input())):
    l = [int(number) for number in input().split()[1:]]
    avg = sum(l) / len(l)
    print(min(l,key=lambda x: abs(x - avg)))

 

komentarz 16 lutego 2019 przez RafalS VIP (122,820 p.)

I dla beki napisałem to sobie w jednej linijce :D

print(*[min(nums, key=lambda x: abs(x - sum(nums) / len)) for _ in range(int(input())) for len, *nums in [[int(n) for n in input().split()]]], sep='\n')

 

Podobne pytania

0 głosów
2 odpowiedzi 286 wizyt
pytanie zadane 10 kwietnia 2017 w C i C++ przez ChiriChiri Obywatel (1,260 p.)
0 głosów
2 odpowiedzi 214 wizyt
0 głosów
1 odpowiedź 1,066 wizyt
pytanie zadane 14 lipca 2019 w C i C++ przez Padomen Początkujący (260 p.)

93,326 zapytań

142,323 odpowiedzi

322,391 komentarzy

62,655 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...