• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
412 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ź 556 wizyt
pytanie zadane 22 stycznia 2016 w Rozwój zawodowy, nauka, praca przez Eraos Nowicjusz (140 p.)
–3 głosów
2 odpowiedzi 646 wizyt
pytanie zadane 1 marca 2016 w C i C++ przez Nowicjusz89 Obywatel (1,050 p.)
0 głosów
1 odpowiedź 1,153 wizyt
pytanie zadane 7 sierpnia 2018 w SPOJ przez Piotr Błaszczak Bywalec (2,890 p.)

93,195 zapytań

142,211 odpowiedzi

322,061 komentarzy

62,519 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 3316p. - dia-Chann
  2. 3251p. - Łukasz Piwowar
  3. 3243p. - Łukasz Eckert
  4. 3222p. - CC PL
  5. 3167p. - Tomasz Bielak
  6. 3157p. - Łukasz Siedlecki
  7. 3133p. - rucin93
  8. 3110p. - Maurycy W
  9. 3028p. - Adrian Wieprzkowicz
  10. 2992p. - Mikbac
  11. 2490p. - Marcin Putra
  12. 2481p. - Anonim 3619784
  13. 2467p. - Michał Telesz
  14. 2427p. - Michal Drewniak
  15. 1949p. - rafalszastok
Szczegóły i pełne wyniki

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!

...