9 / 73
Sep 2015

To zadanie można spokojnie testować na konsoli, ale lepiej testować przekierowując dane z pliku lub na ideone.com - wklejając nie tylko kod ale także dane wejściowe, ale na ideone.com nie działą cerr:
http://ideone.com/ughQ97149

I oczywiście takie deklarowanie tablic:

cin >> ile;
int tab[ile];
int tablica[ile];

dla małych wartości ile zadziała [dla gcc/g++] ale nie jest poprawne.

Ja rozumiem, że ten program jest napisany słabo i można to napisać 1000 razy lepiej. Ale na spoju jestem jakies 2 dni chyba i niewiele więcej programuje (o ile można to tak nazwać).

Założenia podane w zadaniu spełnia mój program i dla każdego 1<=n<=80 pokazuje poprawne dane wyjściowe. Dlatego nie wiem dlaczego mój program nie jest akceptowany... Rozumiem, że byłby komunikat, że przekroczyłem czas kompilacji czy coś. Ale pokazuje mi błąd. A program działa na 100% dla wszystkich n-ów (nie działał dla n=10 ale już działa, wystarczyło edytować pętle "if (n>10)" na "if (n>=10)").

No ok, ja to rozumiem, że dopiero zaczynasz i trudno znaleźć ci błędy, ale nie pisz, że lata jak marzenie wink Dlatego też, pokazałem Ci szablon-szkic, jak to napisać ładniej.

wynik dla n = 11 22 1 poprawny 11 0
wynik dla n = 22 44 1 poprawny 22 0
itd

Narbej, tu mnie masz! smile

Poprawiłem ten fakt i mój kod teraz wygląda tak:

http://ideone.com/4KxfuA375

I po wklejeniu do sprawdzenia moim oczom ukazał sie napis: "zaakceptowano".

Dziękuję wszystkim, którzy udzielali sie w temacie. Za jakiś czas, kiedy moje skillsy w pisaniu się zwiększą usiąde do tego zadania jeszcze raz wink

Pozdrawiam.

W takim razie gratuluję.
Nie powinieneś tutaj jednak umieszczać ani działających [AC] kodów ani linków do nich, nawet gdy są brzydkie jak noc wink, a przecież teraz już nikt nie będzie analizował co tam zmieniłeś i jak - SPOJ zaliczył więc ok. Co innego, gdybyś pytał jak napisać ładniej i co tam poprawić, ale przecież już Ci odpowiedziłem i ja i simbax [i sam tak planujesz] napisz od nowa, a ten link [nieśmiało proponuję] najlepiej usuń.

5 months later

Dzień dobry! To mój pierwszy post tutaj smile Gdyby ktos chciał mi pomóc, byłabym wdzięczna...
Napisałam kod, problem rozwiązuje, w konsoli śmiga.
Niestety sędzia uparcie go nie akceptuje.
Dlaczego?
Domyślam się, że to jakiś problem z wczytywaniem danych?
Pomocy unamused

http://wklej.org/id/1927934/164

w złym miejscu odczytujesz wartości smile Wywal cout'a z maina(), a wstaw go w miejscu funkcji pala palindrom():

pala palindrom(pala adm)
{
    if(reverse(adm.liczba)==adm.liczba)
    {
        cout<< adm.liczba << " " << adm.count<<endl;
        return adm;
    } 
    .
    .
    .

i byłoby na tyle smile

Ps; Jako tytuł na forum podawaj: nr. tytuł_zadania smile Pozdrawiam.

Dla danych przykładowych wypisujesz:
1212
11113
50
zamiast:
121 2
1111 3
5 0
ale możliwe, że oprócz tego jest jeszcze jakiś inny błąd. Sprawdź.

Faktycznie, pomogło, wielkie dzięki! smile
Ale właściwie.. dlaczego tak?
Inne programy przy 'cout' w mainie przechodziły

Poniższy fragment powinien wyglądać trochę inaczej.

else
    {
       ...
       ....
       palindrom(adm);

poniżej poprawnie.

else
    {
       ...
       ....
       return palindrom(adm);
@korrohulko Ale właściwie.. dlaczego tak?

O ile się dobrze orientuję - sam programuję stosunkowo krótko - chodzi o to, że w ten sposób jak przekazujesz argumenty do funkcji, to przekazujesz tylko ich kopie (po powrocie z funkcji oryginał, którego próbujesz odczytać poprzez użycie cout tak naprawdę się nie zmienił, zmieniła się kopia, na której pracowałaś w innej funkcji). Żeby pracować na oryginałach, powinnaś przekazać argumenty przez referencję lub tak jak napisał @narbej korzystać z "returna". Jednak return zmienia tylko jedną wartość, natomiast przez referencję lub wskaźniki można operować jednocześnie na kilku oryginałach.

Ja to tak rozumiem ;p Mam nadzieję, że słusznie.

Faktycznie, masz rację - brakowało przechwycenia wyniku funkcji przy pomocy return.

Dziękuję Wam obu smile

Warto może dodać, że ten błąd - brak drugiego returnu to nie moja zasługa ani spostrzegawczość. Gdy[byś] kompilujesz[owała] swój program z opcją -Wall [warning all - drukuj wszystkie ostrzeżenia], kompilator, dla twojego programu wypisał[by] takie ostrzeżenie:

g++ -Wall twojProgram.cpp
twojProgram.cpp: In function ‘pala palindrom(pala)’:
twojProgram.cpp:41:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^

Trzeba więc czytać, to co wypisuje kompilator i starać się zrozumieć, co "on" chce nam "po[dpo]wiedzieć" wink

3 months later

Witam chciałby podłączyć się do tematu. Stworzyłem taki oto kod ->`

include

include

using namespace std;

int t, n, liczba, liczba2, licznik;
int tab[10];

int doZmiennej(int *tab, int n);
int doTablicy(int *tab, int liczba);

int main()
{
cin>>t;

for(int i=0; i<t; i++)
{
    cin>>liczba;

    n=doTablicy(tab, liczba);

    while(tab[0]!=tab[n])    
    {
        liczba2=doZmiennej(tab,n);
        liczba+=liczba2;
        licznik++;
        n=doTablicy(tab, liczba);
        cout<<liczba<<" "<<licznik<<endl;
    }
    cout<<liczba<<" "<<licznik<<endl;
    licznik=0;
}

}

int doTablicy(int *tab, int liczba)
{

int i=0;

while(liczba)
{
    tab[i]=liczba % 10;
    liczba/=10;
    i++;    
}

return i-1;

}

int doZmiennej(int *tab, int n)
{
int i=n;
int x=1;
int liczba;

while(i>=0)
{
    liczba+=tab[i]*x;
    i--;
    x*=10;                    
}

return liczba;

}

Kompletnie nie mam pojęcia dlaczego to nie działa. Sprawdzając wynik w pętli wszystko się zgadza. Po wyjściu z pętli dla niektórych liczb pokazuje dobrą wartość dla innych jakieś śmieci. Ślęczę już nad tym jakiś czas i nie wiem w czym jest problem. Może ktoś na to rzucić okiem? Pozdrawiam

kod koszmarny, ale prawie działa :), wystarczy dodać 4 znaki, wliczając 2 znaki '/' aby zasłonić niepotrzebne wyprowadzanie pośredniej wartości i jest AC (a nie WA) - jedynie dzięki temu, że zbytnio ograniczono zakres liczb wejściowych

1 month later

Witam napisałem program może niezbyt ładny i pewnie możną to rozwiązać dużo łatwiej, ale dopiero zaczynam, a utknąłem i nie wiem co jest źle. W CodeBlocks działa niby wszystko poprawnie, ale już w Ideone.com zamiast pokazywać właściwe wyniki na wyjściu pokazuje wprowadzoną daną i liczbę obliczeń 0.
http://ideone.com/re0leZ41
Ps. Czy jest gdzieś możliwość, już po zaliczenia zadania zobaczenia prawidłowego, w sensie wzorcowego rozwiązania, aby porównać go ze swoim i na przyszłość nie popełniać tych samych błędów, a nauczyć się stosować prostsze rozwiązania?
Z góry dziękuje za pomoc i pozdrawiam.

17 days later

Witam, program który napisałem przekracza limit czasu. Wyniki które mi się wyświetlają są poprawne. Nie mam zielonego pojęcia co mógłbym jeszcze usprawnić, dlatego wklejam swój kod,z prośbą o pomoc.
kod: http://ideone.com/RTsqbd36