120 / 153
Nov 2018

Nie. Błąd jest w tym, że definiujesz gruszka = 0 i w następnej linii tworzysz tablicę o rozmiarze gruszka. Nigdzie pomiędzy nie nadajesz jej wartości (dopiero po stworzeniu zeroelementowej tablicy).
Wkleiłem stricte dwie linie Twojego kodu. Dajesz gruszka=0 i od razu stwórz tablicę o rozmiarze gruszka. Widzisz to?

Jeśli chcesz stworzyć tablicę a dopiero potem nadać jej rozmiar to są trzy wyjścia:

  1. zastosować vector: https://en.cppreference.com/w/cpp/container/vector:2
    vector tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica.resize(rozmiar);

  2. zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
    float *tablica;
    int rozmiar;
    cin >> rozmiar;
    tablica = new float[rozmiar];

  3. stworzyć na początku tablicę o rozmiarze którego na pewno nie przekroczysz, treść zadania podaje że masz do zsumowania maksymalnie 99 liczb więc 100 elementowa tablica wystarczy:
    float tablica[100];
    a potem indeksować od zera do wartości rozmiar.

PS. stosuj “normalne” nazewnictwo, jak ktoś zobaczy w kodzie banan = gruszka/jablko; - to może później nie wiedzieć co toto wogle robi.

Wielkie dzięki! Zastosuje się do tych możliwości. I tak przestane robić taki bałagan w kodzie, to nie ma sęsu gdy do niego się wróci po x czasie.

Napisałem kod od nowa, poprawiając tablice według waszych rad.
Również kod przechodzi test https://ideone.com/xYG3hh10

Sędzia SPOJ mimo to go odrzuca, mógłby ktoś mnie naprowadzić na odpowiedź?

  1. nie używaj float tylko double (przynajmniej na SPOJu i w większości przypadków w życiu)
  2. podejscia nie są typu double. Robisz o zgrozo niejawną konwersję i jak zawsze w takich przypadkach prosisz się o guza przez błędy precyzji
  3. co z delete[]?

@mariusz193
WIELKIE DZIĘKI dostałem AC :smiley:

@tarpauwatratar
ad 1. Dzięki na pewno się przyda.
ad 2. Faktycznie, ciezko o podejscie 1.3, będę pamiętał.
ad 3. Mój błąd powinienem chyba zrobić tak:
"zastosować tablicę tworzoną dynamicznie (wskaźniki, operator new);
float *tablica;
int rozmiar;
cin >> rozmiar;
tablica = new float[rozmiar];"
Jak radził czaffik

6 months later

Może ktoś pomóc z testem dla którego program nie będzie działał będę wdzięczny.

ok zmieniłem nieco kod tak aby wszystko rozgrywało się w jednej pętli ale nadal jest coś nie tak. Z jakiego testu dostane jeszcze negatywny wynik ?

sprawdzałem ten test i program zwraca dla niego 1 co więc jest z nim nie tak?

To jest zły wynik :frowning: Przeczytaj UWAŻNIE treść zadania. Przecież już wcześniej podałem Ci, że Twój program podaje zły wynik dla tego testu.

w przykładach, które zamieściłeś jest jeden błędny wynik

Dzięki wielki rzeczywiście program źle działał dla wariantu
7 3 1 2 4 5 6 4
skończyło się na ponownym napisaniu z wykorzystaniem double zamiast int ale wszystko działa

2 months later

Masz dwa błędne zakresy dla pętli - powinny wyglądać tak:

for (int j = 0; j < n; j++) 
// ...
for (int j = 0; j < n - 1; j++)
19 days later

Witam, mój pierwszy kod więc mam nadzieje ,że nikogo nie przestraszę. Przy trzecim teście jako liczbę najbliżej średniej wskazuje mi 3 zamiast 2 ktoś jest w stanie wskazać mi błąd/błędy ?

#include
#include
#include <math.h>

using namespace std;

int liczby[5];
double srednia;
int wynik, ile;

int main()
{
cin >> ile;

for (int i=0; i<ile; i++)
{
cin>>liczby[i];
srednia+=liczby[i];
}
srednia=srednia/4;

//cout<<srednia<<endl;

wynik=0;

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

if (fabs(srednia-liczby[i-1]< srednia-wynik))
{
wynik=liczby[i-1];
i++;
}
}
cout<<wynik;

return 0;

}

Jeden widzę. Problem z czytaniem ze zrozumieniem.

Jestem instruktorem żeglarstwa [między innymi] i za stary jestem, aby się bać byle czego :wink: