2716 - UnuDoi: Difference between revisions

From Bitnami MediaWiki
Cata (talk | contribs)
Pagină nouă: 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=sksk¯¯¯¯¯sk¯¯¯¯¯sk, pentru orice număr natural...
 
Cata (talk | contribs)
No edit summary
Line 1: Line 1:
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 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 consideră șirul infinit s format cu cifre de 1 și 2, generat incremental prin extindere, după următoarea regulă de concatenare:
Se consideră șirul infinit s format cu cifre de 1 și 2, generat incremental prin extindere, după următoarea regulă de concatenare:
Line 6: Line 6:
* s2=1221211221121221
* s2=1221211221121221
* …
* …
* sk+1=sksk¯¯¯¯¯sk¯¯¯¯¯sk, 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.
==Cerința==
==Cerința==
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.
Line 16: Line 16:


==Date de ieșire==
==Date de ieșire==
Programul va afișa pe ecran a n-a cifră a șirului s.
Programul va afișa pe ecran un mesaj de validare a datelor și a n-a cifră a șirului s.




Line 23: Line 23:


==Exemplu==
==Exemplu==
Intrare
; Intrare
 
: 11
11
; Ieșire
Ieșire
: Date de intrare valide
 
: 1
1
;Intrare
Intrare
: 20
 
; Ieșire
20
: Date de intrare valide
Ieșire
: 2
 
2


==Rezolvare==
==Rezolvare==
Line 61: Line 59:
     n = int(input("Introduceti valoarea lui n: "))
     n = int(input("Introduceti valoarea lui n: "))
     if validate_input(n):
     if validate_input(n):
        print("Date de intrare valide")
         k = calculate_k(n)
         k = calculate_k(n)
         print(k)
         print(k)

Revision as of 07:15, 28 April 2023

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.

Cerința

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 și a n-a cifră a șirului s.


Restricții și precizări

  • 1 ⩽ n ⩽ 108

Exemplu

Intrare
11
Ieșire
Date de intrare valide
1
Intrare
20
Ieșire
Date de intrare valide
2

Rezolvare

<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

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.