2716 - UnuDoi

De la Universitas MediaWiki

Cerința

Se dă operația x:{1,2}→{1,2} astfel încât 1=2 și 2=1. Operația se poate extinde asupra oricărei secvențe formate cu cifre de 1 și 2, de exemplu 121121212=212212121.

Se consideră șirul infinit s format cu cifre de 1 și 2, generat incremental prin extindere, după următoarea regulă de concatenare:

  • s1=1221
  • s2=1221211221121221
  • sk+1=sksksksk, pentru orice număr natural k.

Dându-se un număr natural n, să se determine a n-a cifră a șirului infinit s.

Date de intrare

Programul citește de la tastatură numărul n.


Date de ieșire

Programul va afișa pe ecran un mesaj de validare a datelor ("Date de intrare valide" pentru date valide; "Valoarea lui n trebuie sa fie intre 1 si 10^8" dacă n depășește valorile cerute) și a n-a cifră a șirului s.


Restricții și precizări

  • 1 ⩽ n ⩽ 108

Exemplu

Intrare
Introduceti valoarea lui n: 11
Ieșire
Date de intrare valide
1
Intrare
Introduceti valoarea lui n: 20
Ieșire
Date de intrare valide
2

Rezolvare

def validate_input(n):
    if 1 <= n <= 10**8:
        return True
    else:
        return False

def calculate_k(n):
    k = 1
    while n >= 4:
        if n % 4 == 2 or n % 4 == 3:
            k = 3 - k
        if n % 4 != 0:
            n = n // 4 + 1
        else:
            n = n // 4
    if n % 4 == 2 or n % 4 == 3:
        k = 3 - k
    return k


if __name__ == "__main__":
    n = int(input("Introduceti valoarea lui n: "))
    if validate_input(n):
        print("Date de intrare valide")
        k = calculate_k(n)
        print(k)
    else:
        print("Valoarea lui n trebuie sa fie intre 1 si 10^8")

Explicatie

Acest cod Python definește două funcții și le folosește pentru a calcula o valoare k în funcție de valoarea introdusă de utilizator pentru n.

Funcția validate_input primește un argument n și returnează True dacă n se află în intervalul [1, 10^8], altfel returnează False.

Funcția calculate_k primește un argument n și calculează o valoare k folosind o serie de condiții. În esență, funcția împarte repetat valoarea n la 4 și schimbă valoarea lui k în funcție de restul împărțirii lui n la 4. Aceasta se repetă până când n devine mai mic decât 4.

În funcția principală, utilizatorul este întâmpinat cu un prompt și îi este cerut să introducă o valoare pentru n. Dacă valoarea este validă, funcția calculate_k este apelată cu n ca argument și valoarea rezultată pentru k este afișată. Dacă valoarea n este invalidă, se afișează un mesaj de eroare.