21 / 58
Feb 2017

Jestem pełen podziwu, tak ślicznie zagmatwany program dla prostego zadania rzadko się widzi :slight_smile:

skąd ci przyszło do głowy zerowanie licznika ? - czy w treści zadania jest coś o tym ?

natomiast w treści wątku jest dokładnie opisane co trzeba zrobić (choć w kilku wariantach i nie każdy wariant jest dobry :slight_smile: )

w każdym razie podkreślam - nie należy zerować licznika

dodatkowo nie trzeba sprawdzać, czy wczytana liczba jest w podanym zakresie, także tablica jest całkowicie niepotrzebna - przecież potrzebujemy wyłącznie poprzedniej liczby i aktualnej

Heh a no tak to jest :stuck_out_tongue: dzięki, podpowiedz ukierunkowała i nadała sens treści zadania. Poprawione i Akcepted. Pozdrawiam :wink:

1 month later

Mam problem ze swoim kodem jak testuje jest ok, a sedzia odrzuca...

include

include

using namespace std;

int main()
{ int i;
int liczba[585];



for(i;i<50;i++)
{    
    
    cin>>liczba[i];
    
        
            if(i>3)
            {
            
            if((liczba[i]==42)&&(liczba[i-1]!=42)&&(liczba[i-2]==42)&&(liczba[i-3]!=42)&&(liczba[i-4]==42))
        {
    
            break;
        
        }    
    }
}










return 0;

}
Prosze o jakies wsparcie...

Zupełnie nie rozumiem, jak to jest możliwe - może tak [źle] testujesz? A jednocześnie doskonale rozumiem sędziego, mnie też odrzuca :wink:

PS
Albo zaznaczaj cały post, a potem klik w </> albo oddzielaj kod od tekstu postu na górze i na dole co najmniej jedną pustą linią od tekstu, albo testuj na ideone, a na forum w swoim poście umieszczaj tylko link do tego testu.

PS 2
Ewentualnie, co innego testujesz u siebie, co innego wysyłasz na spoja, a jeszcze inną wersję kodu przysłałeś tu.

4 months later

WItam a tak pokazuje mi PRZEKROCZONO LIMIT CZASU
Porsze o pomoc

include

using namespace std;

int main() {
int num1=0;
while (num1 != 42)
{
cin >> num1;
if (num1 == 42)
cin >> num1;
if (num1 == 42)
cin >> num1;
}
return 0;
}

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"); 

}
}