ghonghi Posted October 16, 2011 Report Share Posted October 16, 2011 Salut, Incerc in python sa generez niste scaderii care sa implice 2 numere intre 10 si 100 si modul 10 al scazatorului sa fie mai mare ca modul 10 al descazutului.Mica mea functie pare sa functioneze, dar cum am implementat-o nu mi se pare ok. Are cineva alte idei? Multumesc,def genScaderiCuTrecere(n): """ Genereaza scaderi cu trecere peste 10""" assert int(n), "you need to give an integer as parameter" for i in range (0,n): while True: a = random.randrange(10,100) b = random.randrange(10,100) print "Am generat a= " + str(a) + " si b= " + str ( if a > b and a%10 < b%10: break print "\n\nscaderea generata este: \n\n\t" + str(a) + "-" + str( + "=" return None Quote Link to comment Share on other sites More sharing options...
Holographic Posted October 16, 2011 Report Share Posted October 16, 2011 (edited) ca sa scapi de verificaria = random.randrange(10,100)b = random.randrange(10,a)-1a=a-(abs(a%10-b%10-1)) Edited October 16, 2011 by Holographic Quote Link to comment Share on other sites More sharing options...
ghonghi Posted October 16, 2011 Author Report Share Posted October 16, 2011 cool... multumesc Quote Link to comment Share on other sites More sharing options...
cmiN Posted October 16, 2011 Report Share Posted October 16, 2011 #! /usr/bin/env python## generare scaderi prin calcule## 16.10.2011 cmiNIVAL = [10, 99] # interval compactMOD = 10def generare(nr): """ Complexitate maxima O(N^2 * (1+1/mod)/2) amortizata de 'nr' """ tmp = None # un fel de switch ce memoreaza primul pozitiv vec = list() # aici pastram perechile valide a = IVAL[1] # max sau ce valoare vrei tu din interval while a > IVAL[0]: if a % MOD == MOD - 1: a -= 1 # nu putea avea perechi b = a - 1 # a > b while b >= IVAL[0]: if b % MOD > a % MOD: if tmp is None: tmp = b if nr: vec.append((a, ) nr -= 1 else: return vec # returnam lista de 'nr' perechi b -=1 else: if tmp is None: b -= 1 else: b = tmp - MOD tmp = None a -= 1 return vec # s-au epuizat toate posibilitatiledef main(): nr = input("Numar de elemente: ") vec = generare(nr) for el in vec: # si le afisam print el,if __name__ == "__main__": main()In codul tau ai O(nr*R) unde R variaza in functie de randomuri, ceea ce poate lua destul de mult pentru a satisface ambele conditii, pe cand in codul meu am O(nr) unde conditiile sunt indeplinite calculand pe b in functie de a in timp ce decrementez pe a. Quote Link to comment Share on other sites More sharing options...