2407 - Odaoni: Difference between revisions
Am creat de la zero. |
|||
Line 40: | Line 40: | ||
return count | return count | ||
# deschidem fișierele de intrare și de ieșire | if __name__ == '__main__': | ||
with open("odaoni.in", "r") as fin, open("odaoni.out", "w") as fout: | # deschidem fișierele de intrare și de ieșire | ||
with open("odaoni.in", "r") as fin, open("odaoni.out", "w") as fout: | |||
# citim numărul din fișierul de intrare | |||
numar = int(fin.readline().strip()) | |||
# verificăm validitatea datelor de intrare | |||
if not (1 <= numar <= 1000000000): | |||
raise ValueError("Numarul trebuie să fie între 1 și 1000000000") | |||
# calculăm cati divizori au acelasi cifre ca numarul | |||
count = nr_divizori_cu_aceleasi_cifre(numar) | |||
# scriem rezultatul în fișierul de ieșire | |||
fout.write(str(count) + "\n") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 13:47, 16 May 2023
Sursa: [1]
[edit | edit source]
Dorel a primit de ziua lui un tricou pe care era scris numărul n.
Cerinţa[edit | edit source]
Aflaţi câţi divizori ai lui n au mulţimea cifrelor din scrierea lor inclusă în mulţimea cifrelor din scrierea lui n.
Date de intrare[edit | edit source]
Fișierul de intrare odaoni.in conține pe prima linie numărul n.
Date de ieșire[edit | edit source]
Fișierul de ieșire odaoni.out va conține pe prima linie numărul divizorilor lui n care au mulţimea cifrelor din scrierea lor inclusă în mulţimea cifrelor din scrierea lui n.
Restricţii şi precizări[edit | edit source]
- 1 ≤ n ≤ 1.000.000.000
Exemplu[edit | edit source]
- odaoni.in
- 12
- odaoni.out
- 3
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
def aceleasi_cifre(numar, divizor):
# Verifică dacă numarul are aceleași cifre ca divizor. return set(str(numar)) <= set(str(divizor))
def nr_divizori_cu_aceleasi_cifre(numar):
# Calculează numărul de divizori ai numarului care au mulțimea cifrelor din scrierea lor inclusă în mulțimea cifrelor din scrierea numarului.
# inițializăm numărul de divizori cu 0 count = 0 # iterăm prin toți divizorii numarului for i in range(1, numar + 1): if numar % i == 0 and aceleasi_cifre(i, numar): count += 1 # returnăm numărul de divizori return count
if __name__ == '__main__':
# deschidem fișierele de intrare și de ieșire with open("odaoni.in", "r") as fin, open("odaoni.out", "w") as fout: # citim numărul din fișierul de intrare numar = int(fin.readline().strip()) # verificăm validitatea datelor de intrare if not (1 <= numar <= 1000000000): raise ValueError("Numarul trebuie să fie între 1 și 1000000000") # calculăm cati divizori au acelasi cifre ca numarul count = nr_divizori_cu_aceleasi_cifre(numar) # scriem rezultatul în fișierul de ieșire fout.write(str(count) + "\n")
</syntaxhighlight>