• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

W jaki sposób pisać programy do SPOJ?

Object Storage Arubacloud
0 głosów
415 wizyt
pytanie zadane 18 marca 2018 w C i C++ przez DominikWłodarczyk Początkujący (320 p.)
Witam

Niedawno ponowiłem swoją przygodę z C++ i postanowieniem zacząć się bawić w Spoju. Moim pierwszym zadaniem jest napisanie programu który będzie rozpoznawać liczby pierwsze (Link do zadania http://pl.spoj.com/problems/PRIME_T/) . Więc program napisałem lecz Sędzie nie chce go przetrawić . A więc pytanie jest takie program ma być napisany za pomocą pętli i ma automatycznie testować wszystkie opcje czy raczej użyć funkcji cin.

Z góry dziękuje za odpowiedź .

Ps.W razie potrzeby mogę wysłać mój kod).
komentarz 18 marca 2018 przez Aisekai Nałogowiec (42,190 p.)
Co znaczy, że nie chce go przetrawic? Jaki błąd? Podaj kod.
komentarz 18 marca 2018 przez DominikWłodarczyk Początkujący (320 p.)

#include <iostream>
using namespace std;
 
int main() {
    int liczba;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    int n ;
     
    //cout << "Podaj liczbę prób";
    cin >> n;
     
while (n > 0)
{
    //cout << "Podaj liczbę";
    cin >> liczba;
     
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
     
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK \n" ;
    }
     
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE \n" ;  
    }
     
    else
    {
     cout << "TAK \n" ;
    }
    n--;
}   
 
    return 0;
}

#include <iostream>
using namespace std;

int main() {
      
    int liczba=0;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    

for (int n=1; n<100000; n++)
   {
    //cout << "Podaj liczbę";
    liczba++;
    
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK \n"  ;
    }
    
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE \n"  ;  
    }
    
    else
    {
     cout << "TAK \n"  ;
    }
   }

	return 0;
}

Gdy wysyłam pierwszy kod to system mówi mi że podałem złą odpowiedź (o to mi chodziło mówiąc że spoj nie chce go przetrawić) 

2 odpowiedzi

0 głosów
odpowiedź 18 marca 2018 przez adrian17 Ekspert (344,860 p.)

ma automatycznie testować wszystkie opcje czy raczej użyć funkcji cin.

Nie rozumiem co masz na myśli przez "wszystkie opcje".

Opis wejścia jest prosty: na wejściu programu będzie liczba testów i testy, rozdzielone nowymi liniami

3
11
1
4

A na wyjściu ma być TAK/NIE dla każdego testu.

Jak możesz pokazać kod to pokaż.

komentarz 18 marca 2018 przez DominikWłodarczyk Początkujący (320 p.)
edycja 18 marca 2018 przez DominikWłodarczyk

Oto pierwszy kod który testuje "wszystkie" liczby od 1 do 100000:

#include <iostream>
using namespace std;

int main() {
      
    int liczba=0;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    

for (int n=1; n<100000; n++)
   {
    //cout << "Podaj liczbę";
    liczba++;
    
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK \n"  ;
    }
    
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE \n"  ;  
    }
    
    else
    {
     cout << "TAK \n"  ;
    }
   }

	return 0;
}

A to drugi kod który stworzyłem tak aby użytkownik/bot sam podawał liczby do sprawdzenia: 

#include <iostream>
using namespace std;

int main() {
    int liczba;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    


    //cout << "Podaj liczbę";
    cin >> liczba;
    
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK"  ;
    }
    
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE"  ;  
    }
    
    else
    {
     cout << "TAK"  ;
    }
    

	return 0;
}#include <iostream>
using namespace std;

int main() {
    int liczba;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    


    //cout << "Podaj liczbę";
    cin >> liczba;
    
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK"  ;
    }
    
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE"  ;  
    }
    
    else
    {
     cout << "TAK"  ;
    }
    

	return 0;
}

EDIT 1

To moja kolejna próba tym razem zmodyfikowałem drugi kod tak by użytkownik najpierw podał liczbę prób a następnie wszystkie liczby do sprawdzenia. Niestety tak jak poprednio SPOJ nie przyjmuję tego rozwiązania.

#include <iostream>
using namespace std;

int main() {
    int liczba;
    int reszta1;
    int reszta2;
    int reszta3;
    int reszta4;
    int reszta5;
    int n ;
    
    //cout << "Podaj liczbę prób";
    cin >> n;
    
while (n > 0)
{
    //cout << "Podaj liczbę";
    cin >> liczba;
    
    reszta1=liczba%2;
    reszta2=liczba%3;
    reszta3=liczba%5;
    reszta4=liczba%7;
    reszta5=liczba%11;
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK \n" ;
    }
    
    else if (reszta1==0 || reszta2==0 || reszta3==0 || reszta4==0 || reszta5==0 || liczba==1)
    {
     cout << "NIE \n" ;  
    }
    
    else
    {
     cout << "TAK \n" ;
    }
    n--;
}   

	return 0;
}

EDIT 2

Tym razem stworzyłem pętle która ma przetestować wszystkie dzielniki dla testowanych liczb. Ale niestety tym razem przekroczyłem limit czasu 


#include <iostream>
using namespace std;
 
int main() {
    int liczba;
    int x;   
    int y;
    int reszta;
    int n ;
     
    //cout << "Podaj liczbę prób";
    cin >> n;
     
while (n > 0)
{
    //cout << "Podaj liczbę";
    cin >> liczba;
    
 
    y=2;
    while (x=1)
    {
      reszta = liczba % y;
        if (reszta==0)
        {
            if (liczba==y)
            {
            reszta=1;
            }
           break;
        }
        
       
        y++;
    }
    
    if (liczba == 2 || liczba == 3 || liczba == 5 || liczba == 7 || liczba == 11 )
    {
     cout << "TAK \n" ;
    }
     
    else if (reszta==0)
    {
     cout << "NIE \n" ;   
    }
  
    else
    {
     cout << "TAK \n" ;
    }
    n--;
}   
 
    return 0;
}

 

komentarz 18 marca 2018 przez Aisekai Nałogowiec (42,190 p.)
Chłopie, ja polecam najpierw, żebyś wygooglowal sobie, co to są liczby pierwsze bo sądząc po kodzie nie masz zielonego pojęcia. Nie wiem, o co chodzi z tym że dość często się widuje że ktoś sprawdza od 1-9 czy liczba (a właściwie cyfra) jest liczbą pierwszą.

Tak, istnieją też liczby większe od 10 które są liczbami pierwszymi, a największa liczba pierwsza  która jest znana wynosi:

2^(74 207 281)-1.

Oczywiście pamięci w komputerze by brakło żeby bezpośrednio wprowadzić ją do komputera, ale tutaj masz stronkę gdzie masz "trochę" liczb pierwszych:

http://liczby_pierwsze.republika.pl
0 głosów
odpowiedź 18 marca 2018 przez Lucash Nowicjusz (240 p.)
Widać nie zrozumiałeś treści polecenia. Na początku wczytujesz ile liczb masz sprawdzić, robisz pętlę, która wykonuje się 'ile' razy, potem wpisujesz liczbę do sprawdzenia. Tutaj kolejna pętla wewnątrz poprzedniej, która sprawdza czy liczba jest pierwsza ( polecam wewnątrz pętli obliczyć liczbę dzielników, jeżeli ma 2 jest liczbą pierwszą). Następnie warunek i wypisanie odpowiedniego komunikatu.

Podobne pytania

0 głosów
1 odpowiedź 380 wizyt
pytanie zadane 19 sierpnia 2020 w SPOJ przez Billy Użytkownik (680 p.)
0 głosów
1 odpowiedź 230 wizyt
pytanie zadane 15 września 2018 w C i C++ przez qwertyuser Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 677 wizyt
pytanie zadane 22 października 2017 w SPOJ przez Łuk Asz Nowicjusz (160 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...