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 .
Na przyszłość kod wklejaj na ideone14.
- Nie testujesz, lub robisz to źle, zobacz sam: http://ideone.com/OGV31853
- Błędnie zakładasz, że tych wczytanych elementów będzie tylko 20.
- if (tab[i] == 42 && tab[i - 1] != 42) --pkt; <<=== gdy i = 0, odwołujesz się do tab[-1].
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ć
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
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 >, 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
//edit: usunąłem link do mojego kodu
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
- 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.
- 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.
- 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) ? - Zamiast zmiennej int temp, ja użyłbym zmiennej bool.
- 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
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 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. 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.
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.
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");
}
}
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ć?
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;
}