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
]