2716 - UnuDoi: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
==Cerința== | |||
Se dă operația <SPAN STYLE="text-decoration:overline">x</SPAN>:{1,2}→{1,2} astfel încât <SPAN STYLE="text-decoration:overline">1</SPAN>=2 și <SPAN STYLE="text-decoration:overline">2</SPAN>=1. Operația se poate extinde asupra oricărei secvențe formate cu cifre de 1 și 2, de exemplu <SPAN STYLE="text-decoration:overline">121121212</SPAN>=212212121. | Se dă operația <SPAN STYLE="text-decoration:overline">x</SPAN>:{1,2}→{1,2} astfel încât <SPAN STYLE="text-decoration:overline">1</SPAN>=2 și <SPAN STYLE="text-decoration:overline">2</SPAN>=1. Operația se poate extinde asupra oricărei secvențe formate cu cifre de 1 și 2, de exemplu <SPAN STYLE="text-decoration:overline">121121212</SPAN>=212212121. | ||
Line 7: | Line 8: | ||
* … | * … | ||
* sk+1=s<sub>k</sub><SPAN STYLE="text-decoration:overline">s<sub>k</sub>s<sub>k</sub></SPAN>s<sub>k</sub>, pentru orice număr natural k. | * sk+1=s<sub>k</sub><SPAN STYLE="text-decoration:overline">s<sub>k</sub>s<sub>k</sub></SPAN>s<sub>k</sub>, 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. | Dându-se un număr natural n, să se determine a n-a cifră a șirului infinit s. | ||
==Date de intrare== | ==Date de intrare== |
Latest revision as of 06:31, 3 May 2023
Cerința[edit | edit source]
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[edit | edit source]
Programul citește de la tastatură numărul n.
Date de ieșire[edit | edit source]
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[edit | edit source]
- 1 ⩽ n ⩽ 108
Exemplu[edit | edit source]
- 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[edit | edit source]
<syntaxhighlight lang="python"> 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")
</syntaxhighlight>
Explicatie[edit | edit source]
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.