Przekroczony limit czasowy przy sprawdzaniu zadania

Odpowiedz Nowy wątek
2011-10-19 21:41
0

Witam. Mam do rozwiazania pewien problem. Mianowicie chodzi o to zadanie: http://alfred.studmat.umk.pl:[...]304/numeracja-liczb-wymi.html

Moje rozwiazanie niestety nie przechodzi testu ze wzgledu na przekroczony limit czasowy... nie wiem co jest nie tak...

 #include <iostream>
using namespace std;
int main()
{
    long int suma, s,i=1,n, x, y;
    cin >> n;
    while (n>0)
    {
        suma=0;

        for (i=1; suma<n; i++)
        suma=suma+i;

        suma=((suma-i)+1);
        s=(n-suma);

        if((i-1)%2==0)
        {x=s;
        y=i-s;}

        else
        {x=i-s;
        y=s;}

        cout << "TERM "<< n << " IS " << x << "/" << y << endl;
        cin >> n;
    }

return 0;
}

Pozostało 580 znaków

2011-10-19 21:47
0

taki kwiatek:

for (i=1; suma<n; i++)
        suma=suma+i;

Czy takie coś robi się pętlą?

Pozostało 580 znaków

2011-10-19 21:50
0

Hmm... A jak to moge inaczej? Bo nie bardzo mam pomysl... Petla jest skonczona, wiec w czym problem?


Pozostało 580 znaków

2011-10-19 22:10
0

Ciąg arytmetyczny i jego suma:

S_n = \frac{2a_1 + (n - 1)r}{2}n

Co w twoim przypadku skraca się do:

S_n = \frac{n + n^2}{2}
8 sekund... :-D - Endrju 2011-10-19 22:10

Pozostało 580 znaków

2011-10-19 22:10
0

Przecież na to są wzory, np. na sumę ciągu arytmetycznego.


"(...) otherwise, the behavior is undefined".
Nie ogarniam... co jest u mnie ciagiem arytmetycznym? Mowice o tych sumach rownych 1, 3, 4, 5, 6,7 ... ? - razor91pl 2011-10-19 22:40

Pozostało 580 znaków

2011-10-19 22:59
0

Nie bardzo zrozumiałem... Mowicie o ciagu arytmetycznym 3, 4,5,6,7.... ? Mam bałagan w glowie totalny po tylu probach zrobienia tego zadania, dlatego moge nie rozumiec rzeczy trywialnych i oczywistych. Bede wdzieczny za oswiecenie.


Pozostało 580 znaków

2011-10-20 08:18
0

Czy nauczanie matmy aż tak bardzo podupadło? Sądząc po nick'u masz 20 lat i jesteś po maturze, więc pojecie ciągu arytmetycznego powinno być ci znane.
Poza tym jest coś takiego jak wiki.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-10-20 09:18
0

Dobrze wiem czym jest ciag arytmetyczny... ale nie bardzo widze do czego sie tu odniesc... liczby 1/1 , 1/2, 2/1, 3/1, 2/2, 1/3.... takiego ciagu nie tworza... tworzy go co najwyzej suma cyfr na skosie, ale nie wiem jak tego uzyc...


Pozostało 580 znaków

2011-10-20 09:58
Xitami_

czas tracisz na operacje I/O i tą pętlę, jedno i drugie można poprawić.
dla danego n pętlą rozwiązujesz i(i+1)/2<n, da się to zrobić dowcipniej
zamiana cin/cout na scanf/printf też przyśpieszy, a i to da się zrobić dowcipniej

Pozostało 580 znaków

2011-10-20 11:26
0

Wystarczyło we while dodac != EOF i poszlo w czasie 0.008, co mi wystarcza.

Dziekuje Xitami_ za pomoc. Pozdrawiam


Pozostało 580 znaków

2011-10-20 15:11
1

Ha dobre, wszyscy zasugerowali się odpowiedzią Xitami, a nikt nie zauważył najprostszego: niekończonej pętli :) (co jest główną przyczyną przekroczenia czasu w takich zautomatyzowanych konkursach).

ładniej by wyglądało i działało:

long int suma, s,i=1,n, x, y;
    while (cin >> n)
    {
        ...

        cout << "TERM "<< n << " IS " << x << "/" << y << endl;
    }

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2011-10-20 15:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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