1810 - Cifre Gen 5

De la Universitas MediaWiki

Cerința

Scrieți un program care citeşte o valoare naturală nenulă impară pentru n şi apoi generează şi afişează în ordine crescătoare lexicografic toate combinaţiile formate din n cifre care îndeplinesc următoarele proprietăţi:

- încep şi se termină cu 0;

- modulul diferenţei între oricare două cifre alăturate dintr-o combinaţie este 1.

Astfel, pentru n=5, combinaţiile afişate sunt, în ordine, următoarele: 01010, 01210.

Date de intrare

Programul citește de la tastatură numărul n, impar.

Date de ieșire

Programul va afișa pe ecran, pe rânduri separate, soluțiile generate.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".

Restricții și precizări

  • 3 ≤ n ≤ 19

Exemplul 1:

Intrare

5

Ieșire

01010 
01210

Exemplul 2:

Intrare

40

Ieșire

Datele introduse nu corespund restricțiilor impuse.
def check_restrictions(n):
    if 3 <= n <= 19 and n % 2 == 1:
        return True
    else:
        print("Datele introduse nu corespund restricțiilor impuse.")
        return False

def generate_combinations(n, current_combination):
    if len(current_combination) == n:
        if current_combination[0] == 0 and current_combination[-1] == 0:
            print("".join(map(str, current_combination)))
    else:
        for digit in range(0, 10):
            if not current_combination or abs(digit - current_combination[-1]) == 1:
                current_combination.append(digit)
                generate_combinations(n, current_combination)
                current_combination.pop()

# Funcția principală
def main():
    # Citirea valorii pentru n
    n = int(input("Introduceți un număr natural nenul impar n: "))
    
    # Verificarea restricțiilor
    if not check_restrictions(n):
        return
    
    # Inițializarea listei cu prima cifră (0)
    current_combination = []
    
    # Generarea și afișarea combinațiilor
    generate_combinations(n, current_combination)

if __name__ == "__main__":
    main()