Narbej, tu mnie masz!
Poprawiłem ten fakt i mój kod teraz wygląda tak:
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
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 , 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ń.
Dzień dobry! To mój pierwszy post tutaj 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
w złym miejscu odczytujesz wartości 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
Ps; Jako tytuł na forum podawaj: nr. tytuł_zadania Pozdrawiam.
@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.
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ć"
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
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.
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
Zgadza się. tez tak miałem na początku, na początku myślałem, że to błąd w kodzie ale po jakimś czasie się samo naprawiło (w międzyczasie robiłem reset pc), Proponuje zmienić kolejność błędny wynik wyskakuje nie dla tej konkretnej wartości, tylko dla kolejnych wyrazów wejścia. Lecz zupełnie nie mogę znaleźć jakiegoś błędu.
Faktycznie zmiana kolejności zmienia wyjście.
Jak myślisz: czy autor zadania wprowadził opcję if(maciarek zrobił zadanie) then (zrób reset pc i zmień kolejność bo błędny wynik wyskakuje nie dla tej konkretnej wartości tylko dla kolejnych wyrazów wejścia i generalnie po jakimś czasie to się samo naprawi)?
Jeżeli Twój kod nie działa dla prawidłowego, czyli zgodnego z treścią zadania wejścia, które co najwyżej jest w "nieprzyjaznej" dla Twojego programu kolejności to po prostu Twój kod nie działa. Sędzia to nie logika modalna i inne cuda tylko AC albo nie. Pisanie na forum w takim przypadku na ogół mija się z celem bo zwykle wygląda to z perspektywy innych osób mniej więcej tak: "Siemka. Widzę to zadanie i pewnie jest nawet jakaś zależność między wejściem a wyjściem. Ba! Sądzę, że da się to zakodować, ale mi się nie chce... moglibyście zrobić to za mnie? Albo ja wam dam coś co w ogóle nie działa nawet dla przykładowych danych a wy weźcie to przeróbcie". A przecież nie na tym to polega, prawda?
Słowem: masz błąd w kodzie. Program nie działa (nawet) dla przykładowych danych. Z faktu, że nie działa tylko dla pewnych permutacji, mogę wysunąć przypuszczenie, że algorytm jest prawidłowy i wystarczy tylko znaleźć ten błąd i wszystko będzie ok więc nie poddawaj się. Gdy tylko program zacznie działać jak powinien zgłoś go ponownie. Jeżeli będzie AC to gratuluję Jeżeli nie - wtedy napisz i ja albo ktoś inny pomoże Ci w znalezieniu błędu.