13 / 22
Feb 2021

jeszcze 2 różne błędy są w programie, sprawdź dla następujących danych:

2
4 2 2 1 3
4 5 1 1 9

obie odpowiedzi masz błędne

No to jademy :wink:

  1. float, float... float są ok. Ale nie na SPOJu. Używaj double - mały błąd w precyzji spowodowany przez używanie float może skutkować WA. Użycie double w wielu przypadkach niweluje tego rodzaju błędy.
  2. if(test<101), if(n>1 && n <100). Po co to? W specyfikacji wejścia jest jasno podane z jakiego przedziału są liczby. Po co więc sprawdzać czy te warunki są spełnione skoro jest jasno napisane, że są?
  3. int tablica[n]; Poczytaj o dynamicznym alokowaniu pamięci bądź używaj statycznej tablicy int tablica[999999] (bądź inna duża liczba, która na pewno wystarczy w danym zadaniu).
  4. Jest ok, ale na przyszłość przeczytaj http://stackoverflow.com/questions/3118165/when-do-i-use-fabs-and-when-is-it-sufficient-to-use-stdabs41. Zawsze o jedną rozterkę mniej za ileś tam :wink:
  5. if(tablica[k]==srednia) to bardo, ale to bardzo zły pomysł. tablica jest typem int więc w pamięci komputera 2 to 2. srednia jest nawet nie double a (o zgrozo!) float. 2 wprowadzone do float to na przykład 1.99999 albo 2.000001 albo coś tego typu - poczytaj o zmiennoprzecinkowej reprezentacji liczb.

W końcu sędzia zaakceptował, dzięki za pomoc i dobre rady :slight_smile:

1 year later

W zewnętrznej pętli for zamiast inkeremenować licznik, inkrementujesz zmienną z którą go porównujesz.

2 years later


Ponownie program wypisuje poprawne dane i sędzia nie akceptuje, ktoś może wie o co z tym chodzi?

1
4 1 498 500 2

Dobrze liczysz średnią, ale nie szukasz pierwszej liczby najbliższej średniej. Spróbuj przeanalizować dokładnie tę linię kodu:

if (abs(tablica[k]-srednia_tablic)<abs(tablica[k-1]-srednia_tablic)){najblizsza=k;}
6 months later

Cześć,
PYTHON. Wpisuję tutaj bo nie widziałem osobnego wątku dla języka. Czy ktoś bardziej doświadczony mógłby rzucić okiem i podpowiedzieć dlaczego nie zostaje zaliczony kod?

your code goes here

t = int(input())
for i in range(0, t):
x = list(map(int, input().strip().split()))
if x:
xL = len(x)
s = 0
for i in x:
s += i
sA = float(s/xL)
m = x[0]
diff = abs(float(x[0] - sA))
for i in x:
if abs(float(i - sA)) < diff:
diff = abs(float(i - sA))
m = i
print(m)
else:
print(0)

[quote="pedro_modrzew5, post:12, topic:17970"]
t = int(input())

for i in range(0, t):

   x = list(map(int, input().strip().split()))

   if x:

   xL = len(x)

   s = 0

   for i in x:

      s += i

   sA = float(s/xL)

   m = x[0]

   diff = abs(float(x[0] - sA))

   for i in x:

      if abs(float(i - sA)) &lt; diff:

      diff = abs(float(i - sA))

      m = i

   print(m)

else:

   print(0)
[/quote]

Poprawione

coś nie pykło :wink: Jeżeli masz z tym jakieś problemy - a fakt, nie jest to doskonałe rozwiązanie - wstaw kod jako link do Ideone

Czy teraz mógłby ktoś pochylić się na tym problemem?

jak na ideone nie daje sie uruchomic to sedzia tez nie uruchomi. Czy instrukcje if maja prawidlowy format w programie

Cześć, przez kopiowanie kody zgubiła się składnia - wcięcia. Teraz z już dobrze wklejony - wykonuje się na Ideone, na konsoli. Wg mnie wyniki są poprawne jednak nie jest zaakceptowany.

Co do formatu już teraz jest poprawny. Czy ktoś mógłby spojrzeć i podzielić się sugestią nad ewentualną przyczyną?

Nawet dla przykładowych testów zwracasz nieprawidłowe wyniki więc zdecydowanie wyniki nie są poprawne.

Hej,
Faktycznie, chociaż byłem pewny, że jest dobrze…hmm…może przy kolejnym wklejaniu dodałem jakaś starszą wersje i się za fiksowałem, ale…Błąd w tej wersji polegał na tym, iż brałem całą linię do listy a potem do średniej, a przecież pierwsza liczba linii to ilość liczb do średniej.
Mimo wszystko dzięki.

3 months later

pomożecie?

#include <iostream>

using namespace std;
double suma, srednia, drugi;
int n, ile;

int main()
{
    cin >> ile;
    while(ile>0)
    {
    for(int i=0; i<ile ;i++)
    {
        suma = 0;
        srednia=0;
            cin >> n;
            double * t = new double[n];
            for(int j=0; j<n; j++)
                {
                    cin >> t[j];
                    suma = suma + t[j];
                }
            srednia = suma/n;
            double roznica, najmniejsza = 999999999;
            for(int j=0; j<n; j++)
                {
                    roznica = srednia - t[j];
                    if(roznica<0)roznica = roznica*-1;
                    if(roznica==najmniejsza) {drugi = t[j]; cout << drugi;}
                    if(roznica<najmniejsza)
                    {
                        t[0]=t[j];
                        najmniejsza = roznica;
                    }

                }
            cout << t[0]<<endl;
            delete [] t;
            ile--;
    }
    }

    return 0;
}