21 / 58
Feb 2017

Przeczytaj jeszcze raz treść zadania, zwłaszcza część dotyczącą wejścia/wyjścia. Na razie Twój program robi generalnie rzecz ujmując - nic :wink: .
Na przyszłość kod wklejaj na ideone14.

  1. Nie testujesz, lub robisz to źle, zobacz sam: http://ideone.com/OGV31853
  2. Błędnie zakładasz, że tych wczytanych elementów będzie tylko 20.
  3. if (tab[i] == 42 && tab[i - 1] != 42) --pkt; <<=== gdy i = 0, odwołujesz się do tab[-1].
2 months later

Witam! Próbowałem robić to zadanie różnymi metodami, sędzia odrzuca mi, mimo że na ideone i w moim kompilatorze działa (chyba) jak powinno. Byłbym bardzo wdzięczny, gdyby ktoś wytknął mi ten błąd, bo niestety sam nie mogę się z tym uporać :slight_smile:
http://ideone.com/ZCns0p45

Nie działa, bo:

  • Dla pierwszej wczytanej liczby to: tablica[tablica.size()-2] nie ma sensu, bo tablica ma rozmiar 1 (ale prawdopodobnie (tablica[tablica.size()-2] != 42) nie zwróci błędu tylko false)
  • Jeśli 42 jest na początku to nie jest poprzedzona liczbą inna niż 42
  • (ile_razy<=3) - wtedy tutaj nie potrzeba znaku równości żeby mieć prawidłowy wynik dla przykładu

Dwie drobne uwagi:

  • shortów się nie używa w praktyce
  • możesz wypisywać liczby zaraz po wczytaniu - nie musisz korzystać z tablicy pośredniej

Dzięki! Walczyłem jeszcze trochę czasu, ale dało radę :smiley:
Faktycznie bez tej dynamicznej tablicy jest dużo łatwiej, niepotrzebnie sobie skomplikowałem kod.
Shortów już też nie będę używał w takim razie.

4 months later

Za cholere nie chce wejsc, bede probowal jeszcze bez tabeli.

Postaraj się nie tworzyć takiej wielkiej tablicy, bo to nie ma sensu. Ogranicz się tylko do 2 liczb, aktualnie wczytywanej i poprzedniej.

Ja zrobiłem to tak: <tu był link :smiley: >, ale zanim spojrzysz w ten kod, to popróbuj sam różnych rozwiązań i ewentualnie zadaj tutaj pytanie, to postaram się bardziej Cię naprowadzić.

Btw, jeśli trafi się ktoś wystarczająco kompetentny, to chętnie usłyszałbym opinię o moim rozwiązaniu, bo w sumie to jestem z niego dość dumny :smiley:

//edit: usunąłem link do mojego kodu

proponuję drobne zmiany - ponieważ na forum nie powinno być działających (lub prawie) to link wysyłam na priv

Pomagając innym, powinieneś poprzestać na swoich dcwóch pierwszych zdaniach. Podpowiadanie, poprzez pokazywanie działającego [AC] kodu nie jest dobrym pomysłem i nie jest tu na forum praktykowane.
Jednak Ty chciałbyś dodatkowo, przy okazji uzyskać opinie o swoim kodzie. Ponieważ uzyskałeś już ją od @mariusz193 i możliwe, że za chwilę ja napiszę parę słów, powinieneś usunąć link do pastebin.

Twój kod jest dokładnie tym o co chodiło w tym zadaniu, i masz prawo być z niego dumny.
Warto jednak wiedzieć o paru rzeczach, o których teraz pomyślałem

  1. Brak metryki zadania [autor, data itd] i komentarza. Komentarz powin ien zawierać bardzo krótki opis, co program robi, lub krótkie streszczenie kwintensencji treści zadania.
  2. Opis - wykaz zmiennych - w tym zadaniu tylko kilka, w większych więcej zmiennych i można się pogubić. Warto używać wtedy takich nazw jakie zostały użyte w treści zadania.
  3. while (1) ? A co gdy na wejściu nie pojawią się trzy, albo żadna 42? Wprawdzie autor daje gwarancje ale jednak może lepiej i bezpieczniej:
    while (cin >> n) ?
  4. Zamiast zmiennej int temp, ja użyłbym zmiennej bool.
  5. W programowaniu, lepiej odliczać w dół do zera, czyli tutaj zamiast
    int count = 0,
    a potem
    count++;
    lepiej
    int count = 3
    i
    –count
    i wtedy można while (coun)

PS
Ponieważ masz AC, to faktycznie łatwiej podesłać Ci kod, niż opisywać kolejne propozycje poprawek :wink:

AD 1
Co jak u siebie będziesz miał kod, a nie będziesz miał dostępu do SPOJ’a. Będziesz wiedział, że zadanie zaliczone - AC, ale co ono robi? Dodatkowo warto też mieć “u siebie” przykładowe testy + ewentualne swoje. Może więc warto w komentarzu umieszczać nawet całą treść zadania?.

Dzięki za wszystkie wskazówki. Ogólnie to jestem samoukiem i po prostu nie mam aż takiego doświadczenia w programowaniu, więc mój kod wygląda tak, a nie inaczej :stuck_out_tongue: Skomentowałem, bo chciałem udzielić podpowiedzi, co znacznie mogłoby zmienić postrzeganie zadania przez @porshe911 i jednocześnie uzyskać opinię o własnym kodzie. Wpis edytowałem i usunąłem link do kodu.

Już napisałem Ci, że twój kod jest bardzo dobry, ok i spoko. :wink: Napisałeś go starannie, dobrze sformatowałeś, użyłeś gdzie trzeba, wystarczająco białych znaków [spacji] i program robi to co ma robić. To, że @mariusz193 i ja podaliśmy kilka wskazówek, świadczy tylko, że w programowaniu wiele dróg prowadzi do celu i każdy koder/programista to samo zadanie zrobi inaczej albo zrobi na kilka sposobów. To, że jesteś samoukiem nie ma specjalnego znaczenia, liczy się pasja do programowania, do nauki i eksperymentów. Czym więcej będziesz “ćwiczył” tym więcej zdobedziesz doświadczenia, a samouczenie jest tu raczej plusem a nie minusem - nie jesteś tutaj jedynym samoukiem.:wink:
Co do kodu @porshe911 w porównaniu do twojego, to jak porównanie samochodu marki syrenka do samochodu porshe, z tym, że to twój kod jest tu tym lepszym ;-). Sam nie wiedziałem jak podpowiedzieć @porshe911’emu i naprowadzić go na dobrą drogę i twoja podpowiedź była i jest bardzo dobra. Co do zamieszczania na forum działającego kodu, to nawet “światłym” użytkownikom, którzy zalecają usuwanie, zdarza się nie przestrzeganie własnych zaleceń.

Co do zadania i kodu . Można zauważyć, że liczby w zadaniu są dwucyfrowe, więc zakres int, jest tu nadmiarowy, tak jak i do licznika count. Jednak int jest tu najwygodniejszy i zupełnie nie warto oszczędzać tych dwu czy czterech bajtów, bo jest to zupełnie bez sensu - chyba, że naprawdę tego potrzebujesz i wiesz co robisz… Można także wczytywać liczby jako stringi lub wczytywać je znak po znaku. Ale to zupełnie bez znaczenia a poprostu inny sposób i trochę inna droga. Warto to wiedzieć i ewentualnie poeksperymentować, na tak prostym zadaniu, bo nabyta wiedza zaprocentuje na trudniejszych i bardziej skomplikowanych.

1 year later

Witam. Nie rozumiem dlaczego dostaje TLE mimo iż kod przeszedł pozytywnie test na ideone.
Niżej link

a znasz przysłowie, że jedna jaskółka wiosny nie czyni ?

1
42
1
42
1
42
6 months later

Zrobilem omawiane zadanie poprzez warunki if w javie.
Na Ideone,com poprawnie rozwiązuje.
Na spoj daje błąd wykonania (NZEC) .

W czym sie myle. ???

class Main
{
public static void main (String[] args) throws java.lang.Exception
{

  Scanner sc = new Scanner(System.in);
  int a=0;
  boolean warunek=true; 

// System.out.println(“czekam -1”);
a=sc.nextInt(); System.out.println(a);
// System.out.print("_-1");

  while(warunek) {
     if (a==42) {
//        System.out.println("czekam 0");
        a=sc.nextInt(); System.out.println(a); 
   //     System.out.print("_0");
     }
     if (a!=42) {
      //  System.out.println("czekam 1");
        a=sc.nextInt();System.out.println(a);
      //  System.out.print("_1");
        if (a==42) {
         //  System.out.println("czekam 2");
           a=sc.nextInt();System.out.println(a);
          // System.out.print("_2");
           
           if (a!=42) {
             // System.out.println("czekam 3");
              a=sc.nextInt();System.out.println(a);
              //System.out.print("_3");
              if (a==42) {
                 //System.out.println("czekam 4");
                 a=sc.nextInt();System.out.println(a);
                // System.out.print("_4");
                 
                 if (a!=42) {
                   // System.out.println("czekam 5");
                    a=sc.nextInt();System.out.println(a);
                   // System.out.print("_5");
                    if (a==42) {
                       warunek=false;
                       
                       
                    }
                 }  
                 
                 
                 
              }
           }   
           
           
           
        }
     }
     
     
     
  }
  
  //System.out.println("sukces"); 

}
}

Re powyzszego - zrobilem je na dwoch zmiennych.
------------naiistotniejszy fragment--------------

a=sc.nextInt(); System.out.println(a);
while(true) {
b=sc.nextInt(); System.out.println(b);
if ( a!=42 && b==42 ) c++;
a=b;
if (c==3) return;
}


Ale dlaczego nie idzie na if ?

to nie są równoważne algorytmy

0
42
1
2
42
3
4
42
5
6
42

Witam. Próbowałem wykonać program za pomocą wektorów, jednak wyskakiwało przekroczenie limitu czasu. Zmieniłem koncept na użycie stringów, ale dzieje się to samo. Mógłby mi ktoś pomóc? Link: https://ideone.com/NI4bae3

   using namespace std;`
    int main()
    {
    string do_wyswietlenia="";
    string zapasowy;
    int stop;
    cin>>zapasowy;
    do_wyswietlenia+=zapasowy+"\n";
    while(stop!=3)
    {
BBB:
        stop=0;
AAA:
        if(zapasowy!="42")
        {
            cin>>zapasowy;
            do_wyswietlenia+=zapasowy+"\n";
            if(zapasowy=="42")
            {
                stop++;

                if(stop!=3)
                {
                    cin>>zapasowy;
                    do_wyswietlenia+=zapasowy+"\n";
                    goto AAA;
                }
            }
            else
                goto BBB;
        }



        if(stop!=3)
        {
            cin>>zapasowy;
            do_wyswietlenia+=zapasowy+"\n";
        }

    }
    cout<<do_wyswietlenia;



    return 0;
}

Czy powinienem zmienić cały koncept czy da się to jakoś naprawić?

Raczej zmienić koncept i wypisywać na bieżąco wczytane liczby, próbowałem tak przerobić ten kod ale wyskoczył mi błąd wykonania SIGXFSZ (co to jest?).
Przerób tak żeby nie używać instrukcji goto.

Spróbowałem zrobić to zrobić tak, ale nadal dostaje przekroczenie limitu czasu.
link1

using namespace std;
int n,licznik=0;
int main()
{
    bool przelacznik=false; //false-poprzednia 42 true-poprzednia !42
    while(licznik!=3)
    {
        cin>>n;
        cout<<n<<endl;
        if(n!=42)
            {przelacznik=true;
            cin>>n;
            cout<<n<<endl;
            if(n!=42){licznik=0;}}
        if(n==42&&przelacznik==true)
        {
            licznik++;
            przelacznik=false;
        }
        else if(n==42)
        {
            przelacznik=false;
            licznik=0;
        }
    }

    return 0;
}