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

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.

Restricții și precizări

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

4 Ieșire

4 13 31 40 103 130 301 310

Rezolvare

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