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

Problem z programem

Object Storage Arubacloud
0 głosów
219 wizyt
pytanie zadane 1 października 2022 w C i C++ przez Dani Obywatel (1,450 p.)

Witam, 

zrobiłem program dla tego problemu : SPOJ.com - Problem PP0604A.

Jednak pisze mi, że jest błędna odpowiedź. Nie mam pojęcia co zrobiłem źle, bo wyniki wychodzą mi poprawne. Jeśli ktoś by miał czas i rzucił na kod okiem, byłbym bardzo wdzięczny!

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int t,n;
    cin >> t;
    for(int j {0};j<t;++j){
        cin >> n;
        int curr[n];
        double sum{0.0};
        for(int i {0} ; i < n ; ++i){
            cin >> curr[i];
            sum += curr[i];
        }
        sum /= n;
        double best;
        int current_value,value;
        best = abs(abs(curr[0])-sum);
        for(int k {0};k<n;++k){
            value = curr[k];

            if(best > abs(abs(curr[k])-sum)){
                best = abs(abs(curr[k])-sum);
                current_value = value;}
        }
        cout << current_value << endl;
    }

    return 0;
}

komentarz 1 października 2022 przez Great Stary wyjadacz (12,360 p.)
Zmienna current_value nie powinna być czasem zainicjalizowana?
komentarz 1 października 2022 przez Dani Obywatel (1,450 p.)
Być może myślę błędnie, natomiast wydaje mi się, że ta zmienna nie ma potrzeby mieć inicjalizacji, mógłbyś rozwinąć swój pomysł?
1
komentarz 1 października 2022 przez Oscar Nałogowiec (29,320 p.)

W linii 21 wykonujesz porównanie z zerowym elementem i jeśli właśnie ten jest wynikiem to już potem zmiennej current_value nie podstawiasz, bo w porównaniu w pętli (gdzie startujesz od 0 - więc element 0 jeszcze raz będzie sprawdzony)  będzą dwie równe wartości i warunek if nie będzie spełniony i wypiszesz niezainicjowaną zmienną.

Albo na wstępnie podstaw tam wartość "różnicy" dla elementu zerowego, albo zmień warunek na nieostry (większe lub równe). Masz wypisać wartość a nie indeks - więc w przypadku, gdy będzie kilka jednakowych, najbliższych wartości weźmiesz ostatnią a nie pierwszą.

Kilka innych uwag (ale one nie po winny mieć wpływu na wynik):

1. Po co jest abs(curr[k]) (linie 24, 25) - przecież w zadaniu jest podane, że wejściowe liczby są dodatnie. Abs trzeba liczyć tylko od różnicy.

2. zmienna value i tak używasz wartości z tablicy, więc albo ich kopia w tej zmiennej, albo indeksowanie tablicy bezpośrednio - tak jak jest trochę dziwne.

komentarz 1 października 2022 przez Dani Obywatel (1,450 p.)
Dzięki wielkie za pomoc!

1 odpowiedź

0 głosów

Podobne pytania

0 głosów
1 odpowiedź 432 wizyt
pytanie zadane 27 maja 2022 w C i C++ przez rurku Nowicjusz (120 p.)
+1 głos
1 odpowiedź 223 wizyt
0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 31 grudnia 2020 w C i C++ przez patryk8 Początkujący (300 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...