1464 - Șir7

De la Universitas MediaWiki
Versiunea pentru tipărire nu mai este suportată și poate avea erori de randare. Vă rugăm să vă actualizați bookmarkurile browserului și să folosiți funcția implicită de tipărire a browserului.

Enunț

Ionuț este pasionat de numere. Într-o zi , Ionuț a găsit o foaie și, pornind de la cifra 9, a construit un șir S de numere naturale nenule ai cărui primi termeni sunt: 9 19 39 49 69 79 99 109 129 139 159...............

În altă zi, pornind de la cifra 7, a construit șirul 7 17 37 47 67 77 97 107 127 137 157...............

În altă zi, Ionuț a construit același șir pornind de la cifra P.

Cerință

Scrieți un algoritm care determină, pornind de la cifra P, cel de-al K-lea termen al sirului S.

Date de intrare

Se citesc de la tastatură P și K cu semnificația din enunț.

Date de ieșire

Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele de intrare corespund restricțiilor impuse." și programul va afișa pe ecran un număr natural reprezentând cel de-al K-lea termen al șirului S. În caz contrar, se va afișa pe ecran: "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

1 ≤ P ≤ 9 2 ≤ K

Exemplul 1

Intrare
9 10
Ieșire
Datele de intrare corespund restricțiilor impuse.
139

Explicatie

Șirul generat este 9 19 39 49 69 79 99 109 129 139 159. Al 10-lea termen este 139

Rezolvare

Rezolvare ver. 1

def kth_term(p: int, k: int) -> int:
    """
    Funcția calculează al k-lea termen din șirul S, pornind de la cifra p.

    Args:
    p - int: prima cifră din șirul S
    k - int: indicele termenului căutat din șirul S

    Returns:
    int: al k-lea termen din șirul S
    """
    if k % 2 == 0:
        return int(str(k // 2 + k - 2) + str(p))
    else:
        return int(str(k // 2 + k - 1) + str(p))


def validare(p: int, k: int) -> bool:
    """
    Funcția validează datele de intrare, în funcție de restricții.

    Args:
    p - int: prima cifră din șirul S
    k - int: indicele termenului căutat din șirul S

    Returns:
    bool: True dacă datele de intrare sunt valide, False altfel
    """
    if not (1 <= p <= 9):
        print("Eroare: p trebuie să fie între 1 și 9.")
        return False
    if not (2 <= k <= 10**9):
        print("Eroare: k trebuie să fie între 2 și 10^9.")
        return False
    return True


if __name__ == "__main__":
    # Citire date de intrare
    p, k = map(int, input().split())

    # Validare date de intrare
    if not validare(p, k):
        print("Datele de intrare nu corespund restricțiilor impuse.")
        exit()
    print("Datele de intrare corespund restricțiilor impuse.")
    # Calculare și afișare rezultat
    print(kth_term(p, k))