1347 - A k cifra dintr-un numar

De la Universitas MediaWiki

Cerința

Se construiește un număr natural N ale cărui prime 51 cifre sunt:

N = 112233445566778899100111122133144155166177188199200......

Deduceți regula prin care se construiește numărul N și stabiliți care este cea de a K-a cifră din scrierea acestui număr.

Scrieţi un program care citeşte numărul K şi care determină cea de a K-a cifră din scrierea lui N.

Date de intrare

Programul citește din fișierul kcifra.in, de pe prima linie, numărul natural nenul K.

Date de ieșire

Pe ecran se va afișa mesajul: "Datele de intrare corespund restricțiilor impuse."

Pe următorul rând se va afișa un număr natural (o cifră) reprezentând cea de a K-a cifră din scrierea numărului N construit.

În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul "Datele de intrare nu corespund restricțiilor impuse."

Restricții și precizări

  • 1 ≤ K ≤ 588888
  • K număr natural

Exemplu 1

Intrare
10
Ieșire
5

Explicație

Primele 10 cifre ale lui N sunt: 1 1 2 2 3 3 4 4 5 5.

Exemplu 2

Intrare
51
Ieșire
Datele de intrare corespund restricțiilor impuse.
0

Explicație

Primele 51 cifre ale lui N sunt: 112233445566778899100111122133144155166177188199200.

Exemplu 3

Intrare
-2
Ieșire
Datele de intrare nu corespund restricțiilor impuse.

Rezolvare

#1347 K cifra
def conditii(k):
    if not is_natural(k):
        return False

    return 1 <= int(k) <= 588_888


def is_natural(k):
    try:
        # Dacă 'k' poate fi convertit la un număr întreg, verificăm dacă este pozitiv
        # (numerele naturale sunt numere întregi pozitive)
        return int(k) > 0
    except ValueError:
        return False


def k_cifra(k):
    # Generarea numărului N
    n = ''
    i = 1
    # Generăm numărul N doar până la cea de a k-a cifră
    while len(n) < k:
        # Secvența N urmărește regula: pentru orice i -> n(i) = i + ultima cifră a lui i
        # ex: pentru i=12 -> n(i)=122. pentru i=150 -> n(i)=1500
        n += str(i)+str(i)[-1]
        
        # Pasul următor
        i += 1

    print(n[k-1])


if __name__ == "__main__":
    k = input()
    if not conditii(k):
        print("Datele de intrare nu corespund restricțiilor impuse.")
    else:
        print("Datele de intrare corespund restricțiilor impuse.")
        k_cifra(int(k))