Przekroczony limit czasowy przy sprawdzaniu zadania

0

Witam. Mam do rozwiazania pewien problem. Mianowicie chodzi o to zadanie: http://alfred.studmat.umk.pl:8070/ZawodyWeb/problem/1304/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;
}
0

taki kwiatek:

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

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

0

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

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}

0

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

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.

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.

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...

1

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

0

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

Dziekuje Xitami_ za pomoc. Pozdrawiam

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;
    }

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