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 |
---|---|---|---|---|
TFRACAL - Kalkulator ułamków | Zbiór zadań | 2 | 171 | Feb 1 |
FR_20_02 - Poszukiwacze skarbów - Błąd w testach? | Zbiór zadań | 1 | 137 | Apr 2 |
SPOJ.com - Problem ZABAWA pl.spoj.com | Zbiór zadań | 6 | 98 | 27d |