SPOJ - problem z zadaniem

0

Witam! Poprzedni wątek chyba nie doszedł. Zarejestrowałem się na SPOJ i od razu mam problem z zadaniem. "Sędzia" nie zaakceptował mojej odpowiedzi. Zadanie: https://pl.spoj.pl/problems/RNO_DOD/
Mój kod:

#include <iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    if (t > 100 || t < 0)
    {
    int suma[t];
    for (int i = 0; i < t; i++)
    {
        int n;
        cin >> n;
        int liczby[n];
        for (int j = 0; j < n; j++)
        {
            cin >> liczby[j];
            suma[i] += liczby[j];
        }
        cout << suma[i] << endl;
    }
    }
    return 0;
}

Proszę o wskazanie błędu przez, który nie mogę wykonać zadania.

0

Nie umiesz używać tablic o rozmiarze nieznanym w momencie kompilacji. Poza tym, tablica jest tutaj niepotrzebna - NIGDZIE nie odwołujesz się do elementu tablicy innego, niż suma[i]. To samo dzieje się z tablicą liczby - zarówno błąd alokacji jak i to, że jest niepotrzebna.

0

To jak to mam dobrze napisać? Próbowałem dynamiczną, ale kwiatki wychodziły tak (duuuże liczby). A bez tablicy jak to zrobić? Nie robię tego przecież chyba dla konkretnego przykładu 2 zestawów, tylko uniwersalnie dla n zestawów (akurat tutaj 2 wczytane) tak czy nie? Bo nie wiem...

0

Ilość zestawów oraz liczb nie ma najmniejszego znaczenia. Drugi zestaw nie zależy od pierwszego, więc można zapomnieć o pierwszym. Druga liczba nie zależy od poprzedniej (tylko suma), więc też nie jest do niczego potrzebna. Druga, Trzecia, n-ta - bez różnicy.

Gotowiec bez tablic:

cin >> t;
while (t-- > 0) {
suma = 0;
cin >> n;
while (n > 0) {
cin >> l;
suma += l;
}
cout << suma << endl;
}

0
#include <iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    if (t > 100 || t < 0)
    {
    for (int i = 0; i < t; i++)
    {
        int suma[t];
        int n;
        cin >> n;
        int liczba;
        for (int j = 0; j < n; j++)
        {
            cin >> liczba;
            suma += liczba;
        }
        cout << suma << endl;
    }
    }
    return 0;
}

Tak dobrze?

0

@up Powinno być int suma; a nie int suma[t];, za szybko wstawiłem. Wysłałem rozwiązanie i też błędna odpowiedź ;/

0

Działać, działa. Tylko pan sędzia nie chce zaakceptować tego :( Wszystkie błędy poprawiłem no i dalej źle. Przecież nie napisze słowo w słowo poprawnego kodu, jest wiele rozwiązań, chyba ten sędzia o tym wie.

0

http://ideone.com/WglhS Jak dla mnie to nie działa. Testowałeś to jakkolwiek? Czy stwierdzasz że działa, bo się kompiluje?

0

Chyba wiem na czym polega błąd. Na SPOJ'u jest na wyjściu dopiero po wczytaniu wszystkich liczb, a ja wysadzam sumę po każdym zestawie tzn. teście. Zobaczę czy teraz zadziała.

0

Właśnie to zauwżyłema a to dlatego, że pierwotna wersja była taka: if (t > 100 || t < 0) return 1 a potem dałem klamry i poszło... Pfff... Dalej nie działa, już teraz to nie wiem nic. Kod:

#include <iostream>

using namespace std;

int main()
{
    int t;
    cin >> t;
    if (t < 100 || t > 0)
    {
        int suma[t];
        for (int i = 0; i < t; i++)
        {
            int n;
            cin >> n;
            int liczba;
            for (int j = 0; j < n; j++)
            {
                cin >> liczba;
                suma[i] += liczba;
            }

        }
        for (int i = 0; i < t; i++)
        {
            cout << suma[i] << endl;
        }
    }
    return 0;
}

Musiałem to w tablicę wsadzić, bo jak mam na końcu wyświetlać to muszę jakoś przetrzymać te sumy.

0

Skoro tak się upierasz na tablice dynamiczne, to chociaż o nich poczytaj. W tej chwili robisz to źle. A zadanie masz prawie dobrze, wciąż jest zły warunek i niepotrzebna tablica. A problem możliwe że wynika w ograniczeniach narzucanych przez rozmiar int'a.

http://ideone.com/Z4WU2

0

Dzięki, to co napisałeś zadziałało :D Aż jeszcze raz zajrzę co tam pozmieniałeś... ;p

0

Swoją drogą, jaki jest sens sprawdzania ilości testów? Nie łatwiej założyć, że wejście zawsze jest poprawne? (chociaż może nie być, ale wtedy program i tak zadziała, a nie zwyczajnie zakończy się z warunku)

1 użytkowników online, w tym zalogowanych: 0, gości: 1