3604 - Sum Cifs: Difference between revisions

From Bitnami MediaWiki
Mraa (talk | contribs)
Pagină nouă: ==Cerința== Dându-se un număr natural nenul S, să se afișeze în ordine crescătoare toate numerele naturale cu cifre distincte care au suma cifrelor egală cu S. ==Date de intrare== Programul citește de la tastatură numărul S. ==Date de ieșire== Programul va afișa pe ecran pe câte o linie și în ordine crescătoare numerele de cifre distincte care au suma cifrelor egală cu S. Dacă problema nu are nicio soluție, atunci se va afișa doar valoarea -1. ==Restri...
 
Mraa (talk | contribs)
No edit summary
 
Line 25: Line 25:
310
310
==Rezolvare==
==Rezolvare==
<syntaxhighlight lang="python3" line="1">
def cifre_distincte(numar):
def cifre_distincte(numar):
    return len(set(str(numar))) == len(str(numar))
 
  return len(set(str(numar))) == len(str(numar))


def genereaza_permutari(cifre, suma_dorita, permutare_curenta=[]):
def genereaza_permutari(cifre, suma_dorita, permutare_curenta=[]):
    if sum(permutare_curenta) == suma_dorita:
 
        numar = int("".join(map(str, permutare_curenta)))
  if sum(permutare_curenta) == suma_dorita:
        if cifre_distincte(numar):
      numar = int("".join(map(str, permutare_curenta)))
            print(numar)
      if cifre_distincte(numar):
    elif sum(permutare_curenta) < suma_dorita:
          print(numar)
        for cifra in cifre:
  elif sum(permutare_curenta) < suma_dorita:
            genereaza_permutari(cifre, suma_dorita, permutare_curenta + [cifra])
      for cifra in cifre:
          genereaza_permutari(cifre, suma_dorita, permutare_curenta + [cifra])


if __name__ == "__main__":
if __name__ == "__main__":
    # Citirea sumei dorite
    S = int(input())
    # Cifrele disponibile pentru permutare
    cifre = list(range(1, 10))


    # Generarea și afișarea permutărilor
  # Citirea sumei dorite
    genereaza_permutari(cifre, S)
  S = int(input())
  # Cifrele disponibile pentru permutare
  cifre = list(range(1, 10))
  # Generarea și afișarea permutărilor
  genereaza_permutari(cifre, S)
  # Afisarea -1 daca nu exista solutie
  if cifre_distincte(S):
      print(-1)


    # Afisarea -1 daca nu exista solutie
    if cifre_distincte(S):
        print(-1)
python sum_cifre_distincte.py
python sum_cifre_distincte.py
</syntaxhighlight>

Latest revision as of 18:11, 11 January 2024

Cerința[edit | edit source]

Dându-se un număr natural nenul S, să se afișeze în ordine crescătoare toate numerele naturale cu cifre distincte care au suma cifrelor egală cu S.

Date de intrare[edit | edit source]

Programul citește de la tastatură numărul S.

Date de ieșire[edit | edit source]

Programul va afișa pe ecran pe câte o linie și în ordine crescătoare numerele de cifre distincte care au suma cifrelor egală cu S. Dacă problema nu are nicio soluție, atunci se va afișa doar valoarea -1.

Restricții și precizări[edit | edit source]

1 ≤ S ≤ 44 ==Exemplu==: Intrare

4 Ieșire

4 13 31 40 103 130 301 310

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3" line="1"> def cifre_distincte(numar):

  return len(set(str(numar))) == len(str(numar))

def genereaza_permutari(cifre, suma_dorita, permutare_curenta=[]):

  if sum(permutare_curenta) == suma_dorita:
      numar = int("".join(map(str, permutare_curenta)))
      if cifre_distincte(numar):
          print(numar)
  elif sum(permutare_curenta) < suma_dorita:
      for cifra in cifre:
          genereaza_permutari(cifre, suma_dorita, permutare_curenta + [cifra])

if __name__ == "__main__":

  # Citirea sumei dorite
  S = int(input())
  # Cifrele disponibile pentru permutare
  cifre = list(range(1, 10))
  # Generarea și afișarea permutărilor
  genereaza_permutari(cifre, S)
  # Afisarea -1 daca nu exista solutie
  if cifre_distincte(S):
      print(-1)

python sum_cifre_distincte.py </syntaxhighlight>