3050 - ncif: Difference between revisions
Pagină nouă: ==Cerința== Fie n un numar natural. Pentru n seturi de doua numere naturale a si b, sa se afiseze cate cifre are \({a}^{b}\). ==Date de intrare== Fișierul de intrare ncif.in conține pe prima linie numărul n, iar pe urmatoarele n linii cate doua numere naturale a si b separate prin spații. ==Date de ieșire== Fișierul de ieșire ncif.out va conține pe fiecare linie un numar reprezentând cate cifre are \({a}^{b}\). ==Restricții și precizări== * 1 ⩽ n ⩽... |
No edit summary |
||
Line 1: | Line 1: | ||
==Cerința== | ==Cerința== | ||
Fie n un numar natural. | Fie n un numar natural. | ||
Pentru n seturi de doua numere naturale a si b, sa se afiseze cate cifre are a<sup>b</sup>. | |||
Pentru n seturi de doua numere naturale a si b, sa se afiseze cate cifre are | |||
==Date de intrare== | ==Date de intrare== | ||
Fișierul de intrare ncif.in conține pe prima linie numărul n, iar pe urmatoarele n linii cate doua numere naturale a si b separate prin spații. | Fișierul de intrare ncif.in conține pe prima linie numărul n, iar pe urmatoarele n linii cate doua numere naturale a si b separate prin spații. | ||
==Date de ieșire== | ==Date de ieșire== | ||
Fișierul de ieșire ncif.out va conține pe fiecare linie un | Fișierul de ieșire ncif.out va conține un mesaj de validare a datelor, și pe fiecare linie următoare un număr reprezentând câte cifre are a<sup>b</sup>. | ||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 18: | Line 14: | ||
==Exemplu== | ==Exemplu== | ||
ncif.in | ; ncif.in | ||
: 4 | |||
: 1 1 | |||
: 2 10 | |||
: 3 9 | |||
: 100 100 | |||
; ncif.out | |||
ncif.out | : Date de intrare valide | ||
: 1 | |||
: 4 | |||
: 5 | |||
: 201 | |||
==Rezolvare== | ==Rezolvare== | ||
Line 51: | Line 46: | ||
def scrie_fisier_iesire(nume_fisier: str, rezultate: list): | def scrie_fisier_iesire(nume_fisier: str, rezultate: list, valid: bool): | ||
with open(nume_fisier, "w") as f: | with open(nume_fisier, "w") as f: | ||
if valid: | |||
print("Date de intrare valide", file=f) | |||
for r in rezultate: | for r in rezultate: | ||
print(r, file=f) | print(r, file=f) | ||
Line 62: | Line 59: | ||
intrari = [list(map(int, next(f).split())) for _ in range(n)] | intrari = [list(map(int, next(f).split())) for _ in range(n)] | ||
rezultate = proceseaza_intrari(n, intrari) | rezultate = proceseaza_intrari(n, intrari) | ||
scrie_fisier_iesire("ncif.out", rezultate) | scrie_fisier_iesire("ncif.out", rezultate, True) | ||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 07:08, 28 April 2023
Cerința
Fie n un numar natural. Pentru n seturi de doua numere naturale a si b, sa se afiseze cate cifre are ab.
Date de intrare
Fișierul de intrare ncif.in conține pe prima linie numărul n, iar pe urmatoarele n linii cate doua numere naturale a si b separate prin spații.
Date de ieșire
Fișierul de ieșire ncif.out va conține un mesaj de validare a datelor, și pe fiecare linie următoare un număr reprezentând câte cifre are ab.
Restricții și precizări
- 1 ⩽ n ⩽ 10.000
- 0 ⩽ a, b ⩽ 100.000
Exemplu
- ncif.in
- 4
- 1 1
- 2 10
- 3 9
- 100 100
- ncif.out
- Date de intrare valide
- 1
- 4
- 5
- 201
Rezolvare
<syntaxhighlight lang="python"> from math import log10
def calculeaza_numar_cifre(a: int, b: int) -> int:
if not (0 <= a <= 100000 and 0 <= b <= 100000): raise ValueError("a și b trebuie să fie între 0 și 100000") return int(b * log10(a)) + 1
def proceseaza_intrari(n: int, intrari: list) -> list:
rezultate = [] for i in range(n): a, b = intrari[i] rezultate.append(calculeaza_numar_cifre(a, b)) return rezultate
def scrie_fisier_iesire(nume_fisier: str, rezultate: list, valid: bool):
with open(nume_fisier, "w") as f: if valid: print("Date de intrare valide", file=f) for r in rezultate: print(r, file=f)
if __name__ == "__main__":
with open("ncif.in") as f: n = int(next(f)) intrari = [list(map(int, next(f).split())) for _ in range(n)] rezultate = proceseaza_intrari(n, intrari) scrie_fisier_iesire("ncif.out", rezultate, True)
</syntaxhighlight>
Explicatie
Acest program primește un fișier de intrare "ncif.in", care conține un număr n și n perechi de numere întregi a și b. Programul calculează numărul de cifre din b la puterea a și stochează rezultatele într-un fișier de ieșire "ncif.out".
Funcția "calculeaza_numar_cifre" primește două numere întregi a și b și calculează numărul de cifre din b la puterea a, utilizând formula logaritmică.
Funcția "proceseaza_intrari" primește numărul de intrări și lista de perechi de numere întregi a și b, apoi apelază funcția "calculeaza_numar_cifre" pentru fiecare pereche de numere și stochează rezultatele într-o listă "rezultate".
Funcția "scrie_fisier_iesire" primește numele fișierului de ieșire și listă de rezultate și scrie fiecare rezultat în fișierul de ieșire.
În final, programul citește datele de intrare din fișierul "ncif.in", procesează intrările și scrie rezultatele în fișierul "ncif.out".