2407 - Odaoni: Difference between revisions

From Bitnami MediaWiki
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
    # citim numărul din fișierul de intrare
    with open("odaoni.in", "r") as fin, open("odaoni.out", "w") as fout:
    numar = int(fin.readline().strip())
        # citim numărul din fișierul de intrare
    # verificăm validitatea datelor de intrare
        numar = int(fin.readline().strip())
    if not (1 <= numar <= 1000000000):
        # verificăm validitatea datelor de intrare
        raise ValueError("Numarul trebuie să fie între 1 și 1000000000")
        if not (1 <= numar <= 1000000000):
    # calculăm cati divizori au acelasi cifre ca numarul
            raise ValueError("Numarul trebuie să fie între 1 și 1000000000")
    count = nr_divizori_cu_aceleasi_cifre(numar)
        # calculăm cati divizori au acelasi cifre ca numarul
    # scriem rezultatul în fișierul de ieșire
        count = nr_divizori_cu_aceleasi_cifre(numar)
    fout.write(str(count) + "\n")
        # 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]


Dorel a primit de ziua lui un tricou pe care era scris numărul n.

Cerinţa

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

Fișierul de intrare odaoni.in conține pe prima linie numărul n.

Date de ieșire

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

  • 1 ≤ n ≤ 1.000.000.000

Exemplu

odaoni.in
12
odaoni.out
3

Rezolvare

<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>