def generuj_Kcif_cislo_s_danym_cif_souctem_naivne(K, cif_soucet): """ Vypise vsechna K-ciferna cisla majici dany ciferny soucet. Implementovano zpusobem "generuj a testuj". """ ktice = [0]*K def generuj(od): if od == K: if sum(ktice) == cif_soucet: print("".join(map(str,ktice))) return for cifra in range(10): ktice[od] = cifra #vygeneruju zbytek generuj(od+1) for cifra in range(1,10): ktice[0] = cifra #vygeneruju zbytek generuj(1) def generuj_Kcif_cislo_s_danym_cif_souctem_z_hodiny_nefukcni(K, cif_soucet): """ Nefunkcni (bug) pokus o chytre generovani vsech k-cifernych cisel majicich dany ciferny soucet. """ ktice = [0]*K def generuj(od, zbyva): if od == K-1: ktice[od] = zbyva print("".join(map(str,ktice))) return # for cifra in range(10): for cifra in range(max(0,zbyva - 9*(K-od)), min(9,zbyva)+1): ktice[od] = cifra zbyva = zbyva - cifra #vygeneruju zbytek generuj(od+1, zbyva) for cifra in range(1,10): ktice[0] = cifra #vygeneruju zbytek generuj(1, cif_soucet-cifra) def generuj_Kcif_cislo_s_danym_cif_souctem_opravene(K, cif_soucet): """ Vypise vsechna K-ciferna cisla majici dany ciferny soucet. Implementovano chytre - rovnou generuje pouze cisla majici dany cif. soucet. """ ktice = [0]*K def generuj(od, zbyva): if od == K-1: ktice[od] = zbyva print("".join(map(str,ktice))) return # for cifra in range(10): for cifra in range(max(0,zbyva - 9*(K-od)), min(9,zbyva)+1): ktice[od] = cifra #vygeneruju zbytek generuj(od+1, zbyva - cifra) for cifra in range(1,10): ktice[0] = cifra #vygeneruju zbytek generuj(1, cif_soucet-cifra) generuj_Kcif_cislo_s_danym_cif_souctem_opravene(K=3, cif_soucet=10)