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

Problem z programem

VPS Starter Arubacloud
0 głosów
205 wizyt
pytanie zadane 1 października 2022 w C i C++ przez Dani Obywatel (1,420 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,300 p.)
Zmienna current_value nie powinna być czasem zainicjalizowana?
komentarz 1 października 2022 przez Dani Obywatel (1,420 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,290 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,420 p.)
Dzięki wielkie za pomoc!

1 odpowiedź

0 głosów

Podobne pytania

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

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...