@tosemja47
dla “03:00” powinien być wynik “03:03”, a nie “03:30”, gdyż pomijamy “zera wiodące”, a więc “03:03” -> “3:03” jest palindromem.
Jeśli umiesz coś sobie wyobrazić, potrafisz to też zrobić
Walt Disney
Jak działa zegarek, także elektroniczny z wyświetlaczem cyfrowym [digital], każdy chyba wie i nie trzeba tu dużej wyobraźni. Co to są i jak wyglądają palindromy też, chociaż może tu trzeba odrobinę wyobraźni, aby usunąć zera wiodące i znak ':'
. Jednak tutaj słowa Disney’a się nie sprawdzają. Sama wyobraźnia i wyobrażenie sobie, nie wystarczy. Potrzeba znajomości elementarnych podstaw programowania. Przecież twój kod nie ma tak naprawdę wiele wspólnego z C++ [tylko cin, count] i nie oszukujmy się, reszt to jest to “zwykły”, jeżeli mogę tak napisać C. KUpa ifów poganiających i popychanych innymi ifami, spinanie i wpychanie do klamerek pojedyńczej instrukcji break; nieużywanie, tam gdzie wypadałoby spacji [np po ‘,’, ‘;’ itd].
Więc jak należałoby napisać kod i rozwiązać, to zadanie, ten problem? Możliwe, że interesuje Cię tylko AC, więc szkoda zachodu, moja pomoc Ci nie jest potrzebna.
BTW
Postanowiłem, że nie będę pomagał, anonimowo, tosemja47 w pustym profilu to dużo za mało jak dla mnie. Jeżeli chcesz pozostać anonimowy, to ok, ale w takim wypadku chciałbym wiedzieć trochę więcej np by PM. No i należałoby najpierw oczyścić kod, po to aby nabrać odpowiednich nawyków
…
cdn…
Masz rację brakło ni trochę wyobraźni i nie do końca zrozumiałem jakie powinny być wyniki . Co do reszty pozwolę sobie się nie zgodzić.Cały mój kod to zegarek w 5 linijkach i 4 proste linijki sprawdzające czy mamy do czynienia z palindromem.Napisałeś że używam cin i if - biorę to co na danym poziomie zadania jest mi potrzebne (po minimalnej korekcie zadanie śmiga w zerowym czasie).Jeśli następny problem będzie wymagał więcej wespnę się na wyższy poziom.A tak przy okazji fajnie byłoby gdyby ludzie z zaliczonym danym zadaniem mieli dostęp do innych poprawnych rozwiązań.
Niestety SPOJ tego nie umożliwia, ale jest malutka protezka w postaci PM. Jednak, nie zawsze jest to dobry pomysł, oglądanie samych cudzych kodów. Dużo lepszym byłoby dostęp do porządnego omówienia, zadania, sposobu, algorytmu. Także dobra, konstruktywna krytyka własnego rozwiązania i własnego kodu. Też jak wyżej, pod warunkiem, że znajdziesz takiego chętnego, swojego rodzaju mentora.
BTW
Nie mierzę dobroci [lub nie dobroci] ]programu miarą długości [krótkości] kodu źródłowego, ani szybkością wykonania, ani uzyskaniem lub nie AC. JUŻ nie mierzę.
Co już istnieje, np. https://zadania-algorytmiczne.blogspot.com/19 albo omówienia zadań z konkursów.
Faktycznie dawno nie widziałem tak słabego kodu, ale osoby początkujące mogą nie znać pewnych faktów. Może nie przeczytały Jak (NIE?) programować albo Jak czysto pisać w C++ ani nawet C++ kruczki i sztuczki?
Co do reszty… cóż. Nietzsche rzekomo stwierdził, iż to co ma i tak spaść, należy popchnąć. Kto podoła kolejnym trudnościom na SPOJu (i nie tylko) ten osiągnie sukces pisząc kod zgodnie ze sztuką. Jeżeli ktoś ma nie podołać, niezależnie od przyczyny, należy go popchać by nie zmarnował życia łudząc się, że będzie umiał / już umie programować.
Więc ja popycham @tosemja47 do kolejnych zadań, życzę wytrwałości i czas pokaże
Nie żdążyłem odpisać, a w zasadzie napisałem, ale nie zdążyłęm wysłać. Jak wróciłem do komputera po dłuższej chwili [chwila była > 18123 sek ] była już odpowiedź, a to co napisałem wyparowało - wyłączył się w międzyczasie komputer.
Nie czekaj, bo mógłbyś się nie doczekać. Nie czekaj na pomoc, bo to spoj jest najlepszym twoim pomocnikiem. Poprawiłeś testuj i wysyłaj - a może jest już dobrze? Potem dopiero pytaj na forum.
To zadanie można zrobić na wiele sposobów. Można nawet stablicować wszystkie godziny palindromy i korzystać z tak przygotowanej tablicy. Nie jest to najlepsze. Poprawnie wg mnie to:
wczytaj czas
do {
czas++;
} while (not palindrom (czas))
wypisz czas
Na temat czasu: --> Czas i zegar w programowaniu [czyli godzina chaosu]
Twoja funkcja sprawdzająca, czy to palindrom czy nie jest poprawna, ale moje propozycje:
bool czy_palindrom (int czas) {
///zamien czas na godzine i minute a potem na string xd;
int i = 0, k = xd.size()-1;
while (i < k)
if (xd[i++] != xd[k--])
return false;
return true;
}
i jeszcze to samo ale mniej czytelnie, ze wskaźnikami:
bool czy_palindrom (int czas) {
///zamien czas na godzine i minute a potem na string xd;
char * lewy = &xd[0], *prawy = &xd[xd.size()-1];
while (lewy < prawy)
if (*lewy++ != *prawy--) return false;
return true;
}
Pisałem powyższe z głowy, więc nie gwarantuje bezbłędności i poprawności, a moje stare rozwiązanie tego zadania to niestety tablica palindromów .
EDIT
Z pamięci i oczywiście wkradł się błąd. Dzięki @pawoj20, za zwrócenie uwagi.
miałem błędnie: *prawy++ i k++
EDIT II
Nazwa!:
Czy stosować czy_palindrom(), czy palindrom()? Już z powyższego wynika, że jedna nazwa jest lepsza, ale jeszcze zastosowanie, powinno przeważyć szalę:
if (not czy_palindrom (czas))
if (not palindrom (czas))
Obie formy są poprawne i to ty decydujesz co zastosujesz.
I pytanie, czy trzeba zamieniać liczbę czas w formacie godzinaminuta, bez zer wiodocąch na string, aby sprawdzić czy to palindrom? Czy to jedyna metoda?
Możliwe, że takie coś poniższego by zadziałało, ale czy taka metoda jest uniwersalna i dla wszystkich nawet dużych liczb? Co z zerami wewnątrz liczby? Powinno być ok, ale nie testowałem, więc nie daję głowy.
bool czy_to_palindrom (czas)
zamień czas na liczbę godzinaminuty ==> godzina*100 + minuty
int lewa = 1;
while 10*lewa <= liczba
lewa *= 10
while lewa > 1
if (liczba / lewa != liczba %10) return false;
liczba %= lewa; liczba /= 10; lewa /= 100;
return true;
Jak napisałem powyżej bez gwarancji. Jak chcesz użyć, sam przetestuj. To ma tylko ilustrować, że nie ma jednej drogi, a wszystkie prowadzą do Rzymu. [do AC ]
Witam!
W zadaniu należy wziąść pod uwagę kilka czynników.
0/
najważniejsze !
musi być wyjęte ciasto po jakimś czasie!
dodajemy najmniejszy przedział czasowy
czyli do minut dodajemy 1
12:18 badamy ciąg 1219
1/
pomijanie zer i dwukropka :
np
00:00 badamy ciąg 1
05:05 -> 506
23:00 -> 2301
2/
jak mamy późną godzinę i zahaczamy o nową dobę
/HH>23 i MM>59 /
to zegar biegnie od nowa
23:59 badamy ciąg 0
3/
mój algorytm słownie taki
a/ wczytuje stringa
b/ wyłuskuje substringiem godziny i minuty
c/ zamieniam stoi stringi na int
d/ dodaje do minut 1, badam czy MM<59,
jak nie to HH=HH+1
dla HH==23 && MM==59 mamy po dodaniu 1 minuty HH=0 i MM=0
e/ tworzę stringa z HH i MM za pomocą to_string
f/ w funkcji badam czy string jest palidionem
g/ jak jest to wyskakuje z dwóch pętli /godziny i minuty/ sposobem i=24; j=60
z grubsza tyle
Pozdrawiam Piotr
Witam,
czy mógłbym prosić o pomoc…
wydaje mi się, że otrzymuję poprawne odpowiedzi ale brak AC
Czy może ktoś mi pomóc i wskazać dla jakich godzin mam złe odpowiedzi
https://ideone.com/JahvgJ7
Suggested Topics
Topic | Category | Replies | Views | Activity |
---|---|---|---|---|
MBPROB01 - History version in plaintext pl.spoj.com | Zbiór zadań | 6 | 152 | Jul '24 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 75 | Apr 2 |
PP0504B - StringMerge - w języku C | Zbiór zadań | 5 | 187 | Jun '24 |
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 125 | Feb 1 |
TOPSORTL - Porządek leksykograficzny w grafie | Zbiór zadań | 3 | 127 | Jul '24 |