1 / 52
Jun 2017

Witam, stworzyłem program w odpowiedzi na zadanie http://pl.spoj.com/problems/PP0602A/207
Jednak nie działa on poprawnie podczas pokazywania liczb nieparzystych
oto mój kod: http://pl.spoj.com/problems/PP0602A/207
Bardzo proszę o jakieś sugestie :slight_smile:

Edit: zgubiłem też usuwanie tablicy;

  • created

    Jun '17
  • last reply

    Apr '20
  • 51

    replies

  • 3.3k

    views

  • 13

    users

  • 8

    likes

  • 11

    links

Frequent Posters

There are 51 replies with an estimated read time of 4 minutes.

Odpowiedź @redysz 'a była, jeżeli mogę tak się wyrazić, odpowiedzią retoryczną [skoro jest takie pytanie, to czemu odpowiedź nie miałaby też taka być?] :wink:

PS
Bardzo dobrze, że umieściłeś w swoim poście link do samego zadania, ale czy aż dwa razy, to już nie lekka przesada!? [pytanie retoryczne] :wink:

w porządku, rozumiem co to pytanie retoryczne, nie zauważyłem po prostu, że wkleiłem ten sam link dwukrotnie,
[tu był kod] :smiley:

tab[j]=tablica[a];
czy na pewno to chciałeś zrobić?

A z innej beczki... kto mi wyjasni ten output: [był link] ? Chodzi mi o pierwszą dwójkę w pierwszym wierszu. Rozumiem, że z linijki cout<<tab[j]<<endl; i inputu 4 1 2 3 5, ale w zasadzie czemu czwórka się nie wyświetla?
Edit... a już ogarnąłem, zapomniałem o tym jaką rolę spełnia pierwsza z liczb.

Nie wiem, czy to poprawne, ale ogólnie to chodziło mi o to, że każda nieparzysta wartość jest przypisywana do kolejnej szufladki innej tablicy, żeby potem móc je wyświetlić po kolei w osobnej pętli.

To ja wiem, ale wczytujesz do jednej tablicy cin >> tab[j] i to właśnie do niej przypisujesz wartość z drugiej tablicy, która wartości żadnych jeszcze nie ma tab[j]=tablica[a];. Później wyświetlasz dane z drugiej tablicy (cout<<tablica[j];) do której nie przypisałeś żadnych wartości.

[tu był kod]
okej, ale wpisując cin>>tab[j] tablica tab dostaje jakąś wpisaną wartość, w powyższym kodzie odwróciłem te tablice względem znaku równości (tablica[a] = tab[j]) jednak to wciąż nic nie daje, a przecież w takim układzie przypisuje tablicy tablica wartości tablicy tab.

Zgadza się, poprawiłeś jeden (krytyczny) błąd. Jest ich masa więcej, ale ten uniemożliwiał dochodzenie. Teraz można dalej: czy w zadaniu (tym co dwa razy wkleiłeś) wyniki są wyświetlane wsposóbotakibezspacjilubz
ogromną
ilością
enterów?

Popraw więc dwa kolejne błędy: cout<<tab[j]<<endl; i cout<<tablica[j]; oraz zastanów się kiedy chcesz wyświetlić nowy wiersz. Jak to zrobisz to... nadal będzie źle, ale już można będzie ogarnąć skąd te dziwne liczby.

Wklejaj też kod do ideone wraz z inputem ze spoja. Jak to zrobisz porównuj swój out z tym z zadania.

  1. Jeżeli masz problemy z uzyskaniem AC, to pierwsze co robisz, to jeszcze raz [lub może pierwszy raz;-)] czytasz uważnie treść zadania.
  2. Jeżeli nadal nie AC, to czytasz ewentualnie [najczęściej bezsensowne ale czasami nie] komentarze pod zadaniem.
  3. Następnie wyszukujesz temat zadania na forum, szukasz i czytasz.
  4. Dopiero potem powinieneś pytać na forum.

PS
Czy wiesz co na ideone znaczy stdin oraz: "Standard input is empty"?
Gdyby nie był empty, oznaczałoby to, że chociaż [dodatkowo] testujesz w taki właśnie sposób, na ideone.com, a tak, skąd mogę wiedzieć czy i jak to robisz w ogóle?

PS 2
Mimo wszystko, masz u mnie małego + [a może nawet dużego

+]

bo nie wysłałeś swojego błędnego kodu na SPOJ'a

Uch, po 22 godzinach, siedziałem chwilę nad tym kodem i przyznaję, że nie chce się poddać, ale wciąż nie widzę błędu, nie mam pojęcia skąd te dziwne liczby, oddzieliłem endl. Nie poddam się, ale jak ktoś mnie trochę "kopnie" jeszcze do przodu to tez będę wdzięczny

Edit: Nie, że 22 godziny siedziałem, tylko że tyle minęło rzecz jasna :smiley:

U mnie dużego, ale nie za niewysyłanie błędnego kodu (dawanie plusików osobom, które nie wysyłają kodu nie działającego dla przykładowych danych to trochę jak dawanie plusików aptekarzom za to, że raczyli sprzedać wodę utlenioną :wink:), a za walkę. Z tego powodu podpowiedź będzie większa niż zwykle. Przynajmniej według mnie :wink:

Po kodzie zgaduję, że nie masz wprawy w C++. Stąd polecam Ci napisać kod prościej, a ewentualnie wskaźniki wykorzystać po uzyskaniu AC - małymi kroczkami do celu.

1) zrób jedną duuużą tablicę, np. na 1000 elementów. Wówczas wejście na pewno Ci się zmieści, a używanie jednej tablicy o stałym rozmiarze jest prostsze niż new i delete.
2) dobrze wczytujesz t i n. Przy takiej tablicy jak napisałem będziesz pracować na elementach od 0 do n więc żadna zmiana z powodu 1) nie nastąpi na tym etapie
3) po wczytaniu liczb do tablicy (w takiej kolejności jak są na wejściu - nie kombinuj tu tylko na etapie ich wypisywania) w kolejnej pętli wypisuj je zgodnie ze specyfikacją zadania. Pamiętaj o spacjach (cout << " ") i endl

Oczywiście Twój pomysł może być dobry, a nawet lepszy od mojego. Sądzę jednak, że mój jest prostszy - wczytaj wejście w jednej trywialnej pętli bez zbędnego analizowania wczytywanych liczb, a w drugiej wypisz najpierw liczby na pozycjach takich a potem na siakich.

Jeżeli jednak wolisz swoje rozwiązanie, z pewnością inne osoby Ci z tym pomogą (ja niestety nie mam czasu wczytywać się w kod) :wink:

Jestem pewien, że gdybyś przeznaczył tylko 15 minut z "tych 22 godzin" [w cudzysłowiu] na dokładne przeczytanie treści zadania, nie potrzebowałbyś ich aż tylu. Moja rada, przeczytaj w końcu, zrozum o co chodzi i zacznij od początku, tak, żeby twój program próbował robić to co wymagane jest w zadaniu, a nie twoje błędne wyobrażenie o tym co jest wymagane.

Dobra, teraz mi głupio, bo rzeczywiście nie zrozumiałem zadania, dostałem AC, jestem Wam wdzięczny za pomoc, chociaż jest mi głupio to jestem zadowolony; Jak też słusznie zauważyliście nie jestem zbyt biegły w c++, to jeszcze ciągle moje początki z programowaniem :smiley:
Wrzuciłbym kod, ale myślę, że w ten sposób nie pomogę nikomu w niczym :wink:

Nie tylko nie dawaj kodu (nie podajemy działającego kodu), ale skasuj teraz wszystkie poprzednie linki.

Pomógłbyś, tzw cheaterom, osobom kopiującym gotowe kody. Inne osoby i tak tego nie będą czytać, tylko od razu zadawać na nowo stare pytania, więc błędne kody można spokojnie zostawić w "prezencie" dla bezmyślnych kopiarzy.

4 months later

Hej, stworzyłem taki kod i nie wiem gdzie jest błąd, proszę o pomoc.