20 / 30
Jun 2020

To co znalazłem to taki oto test:
wejście:
2
09:59
19:59
prawidłowe wyjście:
10:01
20:02

PS. Ja tego zadania nie zrobiłem, więc nie wiem czy poprawa tych przypadków wystarczy.

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 :wink: ] 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 :wink: .

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()? :wink: 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 :wink: ]

1 year later

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

3 months later

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

Po pierwsze, to jest bardzo ciekawa linijka:

cout << “OO:0” << m << endl;

Po drugie, dla 00:09 masz złą odpowiedź

Ok, dzięki… Czeski błąd :smile:
To poprawione, dla 00:09 rozumiem że ma być 00:11 ??
Też poprawione…
Poza tym coś jeszcze wynalazłeś ??

Już AC dzięki za pomoc :sunny:

No to gratulacje.
Jeszcze jest prośba, żeby skasować link do kodu z wcześniejszej wiadomości.

A dodatkowo możesz się zastanowić, jak rozwiązać to zadanie, żeby pozbyć się tych wszystkich ifów.