4249 - Inlocuire Cmmdc Oglindit
Cerința[edit | edit source]
Se dă un tablou cu n
elemente, numere naturale mai mari decât 1
. Să se înlocuiască fiecare element din tablou cu cel mai care divizor comun al său cu oglinditul său și apoi să afișeze elementele din tabloului de la dreapta la stânga.
Se vor defini și apela următoarele subprograme:
citire
, care citește de la tastatură valoarea luin
și celen
elemente ale tablouluiafisare
, care afișează pe ecran elementele tabloului printr-o parcurgere de la dreapta la stânga, separate prin exact un spațiuoglindit
, care determină oglinditul unui număr datcmmdc
, care calculează cel mai care divizor comun a două numere date
Date de intrare[edit | edit source]
Se citește de la tastatură numărul n
, iar apoi cele n
elemente ale tabloului.
Date de ieșire[edit | edit source]
Se vor afișa pe ecran elementele tabloului după modificarea cerută, separate prin exact un spațiu.
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 1000
- elementele tabloului vor fi mai mici decât
1.000.000.000
Exemplul 1[edit | edit source]
Input:
7
7 18 18 5 14 20 4
Output:
[4, 2, 1, 5, 9, 9, 7]
Explicație:
Modificările efectuate sunt:
7 se înlocuiește cu 7 deoarece cmmdc(7,7) este 7.
18 se înlocuiește cu 9 deoarece cmmdc(18,81) este 9.
18 se înlocuiește cu 9 deoarece cmmdc(18,81) este 9.
14 se înlocuiește cu 1 deoarece cmmdc(14,41) este 1.
20 se înlocuiește cu 2 deoarece cmmdc(20,2) este 2.
4 se înlocuiește cu 4 deoarece cmmdc(4,4) este 4.
La final, elementele sunt afișate de la dreapta la stânga.
Exemplul 2[edit | edit source]
Input:
0
7 18 18 5 14 20 4
Output:
Restricții neîndeplinite pentru n. Introduceți un număr între 1 și 1000.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def validate_input_restrictions(n, tablou):
if not 1 <= n <= 1000: print("Restricții neîndeplinite pentru n. Introduceți un număr între 1 și 1000.") return False if any(x <= 1 or x >= 1000000000 for x in tablou): print("Elementele tabloului trebuie să fie mai mari decât 1 și mai mici decât 1.000.000.000.") return False return True
def citire():
n = int(input("Introduceți numărul n=")) print("Introduceți elemente vector") vector = list(map(int, input().split())) return n,vector
def afisare(vector):
print(vector[::-1])
def oglindit(x):
aux=0 while x!=0: aux = aux*10 + x % 10 x//=10 return aux
def cmmdc(x):
a=oglindit(x) while x != a: if x>a: x-=a else: a-=x return x
def inloc(vector):
for i in range(len(vector)): aux=cmmdc(vector[i]) vector[i]=aux return vector
def main():
n, tablou = citire() if not validate_input_restrictions(n, tablou): return tablou=inloc(tablou) afisare(tablou)
if __name__ == "__main__":
main()
</syntaxhighlight>