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

odc. 11 c++, praca domowa, spoj - PP0604A - Średnia arytmetyczna

Object Storage Arubacloud
0 głosów
338 wizyt
pytanie zadane 29 stycznia 2021 w C i C++ przez PoProstuAndrzej Nowicjusz (170 p.)
edycja 29 stycznia 2021 przez PoProstuAndrzej

Witam 

od razu wspomnę że nie znalazłem problemu w działaniu mojego skryptu u mnie wszystko działa

stworzyłem kod rozwiązujący pracę domową z odc 11 c++ " skrypt wyszukujący najbliższą liczbę do średniej z podanych liczb "  udało się wszystko działało po czym dowiedziałem się o spoj i znalazłem tam bardzo podobne zadanie (przerobiłem skrypt na potrzeby zadania)

treść zadania  z spoj:

W tablicy n liczb całkowitych dodatnich znajdź tę, której wartość jest najbliższa warości średniej z wszystkich liczb.

Input

Najpierw t < 101 - liczba testów. W kolejnych liniach, dla każdego testu, liczba 0 < 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.

i nadal wszystko u mnie działa poprawnie nie znalazłem żadnego błędu podczas wykonywania skryptu 

ale spoj po sprawdzeniu podaję że wynik wykonania skryptu był błędny i tutaj mam pytanie co zrobiłem nie tak że mój skrypt nie może przejść testu na spoj 

jestem bardzo początkującym w c++ i nie znam się na tym zbyt dobrze 

mój kod:

#include <iostream>
using namespace std;

float ab(float x)
{
if (x < 0) x = x * (-1);
return x;
}

int num_var;
int var[101];
float diff[101];
float avg, m;
int closest;
int ile;

int main()
{
cin >> ile;

for (int i = 0; i < ile; i++)
{
    cin >> num_var;
    avg = 0;
    for (int i = 0; i < num_var; i++)
    {
        cin >> var[i];
        avg += var[i];
    }
    avg /= num_var;
    for (int i = 0; i < num_var; i++)        diff[i] = ab(avg + (var[i] * (-1)));
    m = diff[0];
    for (int i = 0; i < num_var; i++)
    {
        if (m > diff[i])
        {
            m = diff[i];
            closest = i;
        }
    }
    cout << var[closest] << endl;
}
return 0;
}

krótki opis mojego kodu: 

  • pobiera wartość ile razy ma się wykonać 
  • pobiera ile liczb zostanie dodanych
  • oblicza średnią 
  • oblicza wartość bezwzględną z różnicy pomiędzy średnią a wartością dodanej liczby
  • szuka z pośród podanych liczb na podstawie wielkości różnicy najbliższej liczby do średniej
  • wypisuję liczbę najbliższą średniej 

1 odpowiedź

+1 głos
odpowiedź 29 stycznia 2021 przez Michałełe Nałogowiec (25,600 p.)
Na pierwszy rzut oka - nie zerujesz tych zmiennych globalnych, przez co przy każdej następnej tablicy mogą tam być stare wartości (szczególnie chodzi mi o zmienną m, bo coś tam później ją porównujesz).

Napisz czy o to chodziło
komentarz 29 stycznia 2021 przez PoProstuAndrzej Nowicjusz (170 p.)
edycja 29 stycznia 2021 przez PoProstuAndrzej
po rozpoczęciu wszystkie są nadpisywane nowymi także nie ma z tym problemu

do m zostaje przypisana 1 zmienna z brzega o id 0 tak żeby przyrównać ją do reszty z tablicy i sprawdzić czy nie ma innej zmiennej mniejszej od tej z id 0 (do m przypisuję różnicę pomiędzy średnią a daną liczbą)

jedyną liczbą która musi się resetować to średnia avg reszta jest nadpisywana

ps. zerowanie m nic nie zmieniło sprawdziłem tak na wszelki wypadek

ps. 2 z góry przepraszam jeśli coś słabo opisałem
komentarz 29 stycznia 2021 przez PoProstuAndrzej Nowicjusz (170 p.)

@Michałełe, a więc odkryłem błąd ogólny w działaniu mojej funkcji kod musi zaokrąglać do dołu przez co w niektórych przypadkach zwraca błędny wynik w każdym razie dzięki za pomoc bo trochę po części dzięki tobie wpadłem na ten błąd

Podobne pytania

0 głosów
1 odpowiedź 521 wizyt
pytanie zadane 22 stycznia 2016 w Rozwój zawodowy, nauka, praca przez Eraos Nowicjusz (140 p.)
–3 głosów
2 odpowiedzi 466 wizyt
pytanie zadane 1 marca 2016 w C i C++ przez Nowicjusz89 Obywatel (1,050 p.)
0 głosów
1 odpowiedź 1,019 wizyt
pytanie zadane 7 sierpnia 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...