4049 - N Div N Len: Difference between revisions

From Bitnami MediaWiki
Paul Ungur (talk | contribs)
Tag: visualeditor
Paul Ungur (talk | contribs)
Tag: visualeditor
Line 26: Line 26:
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python" line="1">
<syntaxhighlight lang="python" line="1">
n = int(input())
def validate_input(n):
    if not isinstance(n, int) or n < 1 or n > 10**5:
        return False
    return True


# Creăm un număr k format din n cifre "9"
def find_k(n):
k = int("9" * n)
    m = len(str(n))
    k = [1] + [0] * (m - 1)
    for i in range(m - 2, -1, -2):
        k[i], k[i+1] = 1, 0
    while int(''.join(map(str, k))) % n != 0:
        for i in range(m - 1, -1, -1):
            if k[i] == 0:
                k[i] = 1
                break
            else:
                k[i] = 0
    return int(''.join(map(str, k)))


# Verificăm dacă k este divizibil cu n, altfel scădem 1 până când găsim un astfel de număr
def main():
while k % n != 0:
    n = int(input("Introduceti n: "))
     k -= 1
    if not validate_input(n):
        print("Date de intrare incorecte")
        return
    k = find_k(n)
     print(k)


print(k)
if __name__ == '__main__':
    main()
</syntaxhighlight>
</syntaxhighlight>

Revision as of 15:22, 24 March 2023

Cerința:

Se dă un număr natural n. Găsiți orice număr k de exact n cifre care este divizibil cu n.

Date de intrare:

Se citește numărul n.

Date de ieșire:

Se afișează numărul k.

Restricții și precizări:

1≤n≤10^5 Dacă există mai multe soluții posibile, se acceptă oricare. Pentru 20 de puncte, n≤6 Pentru 40 de puncte, n≤9 Pentru 50 de puncte, n≤18

Exemplu:

Intrare 3 Ieșire 123

Explicație:

Numărul 123 are 3 cifre și este divizibil cu 3.

Rezolvare

<syntaxhighlight lang="python" line="1"> def validate_input(n):

   if not isinstance(n, int) or n < 1 or n > 10**5:
       return False
   return True

def find_k(n):

   m = len(str(n))
   k = [1] + [0] * (m - 1)
   for i in range(m - 2, -1, -2):
       k[i], k[i+1] = 1, 0
   while int(.join(map(str, k))) % n != 0:
       for i in range(m - 1, -1, -1):
           if k[i] == 0:
               k[i] = 1
               break
           else:
               k[i] = 0
   return int(.join(map(str, k)))

def main():

   n = int(input("Introduceti n: "))
   if not validate_input(n):
       print("Date de intrare incorecte")
       return
   k = find_k(n)
   print(k)

if __name__ == '__main__':

   main()

</syntaxhighlight>