Advertisement
jukaukor

osajoukkojentulo_vali.jl

Jun 5th, 2023
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.92 KB | None | 0 0
  1. using StatsBase
  2. # ohjelmointikielenä Julia
  3. # valitaan lukujoukosta a uniikkeja n luvun osajoukkoja
  4. # Etsitaan ne joukon a osajoukot joiden jäsenten tulot on tietyllä välillä
  5. # Juhani Kaukoranta 5.6.2023
  6. a=[22, 70, 75, 5, 39, 54, 52, 13, 98, 18, 45, 73, 39, 17, 64, 31, 94, 93, 69, 5]
  7. # tai esim a = rand(1:99,50) tuottaa 50 kpl kokonaislukuja väliltä 1...99
  8. # etsi n kpl m luvun ryhmiä joiden lukujen tulo > tuloraja tai vaihtoehtoisesti tulo < tuloraja
  9. # joukko on uniikki jos ei ole ehdon täyttävää muuta joukkoa jossa on täsmälleen samat luvut
  10. function haku(a,n,m,alaraja,ylaraja)
  11. # a = lukujoukko josta valitaan osajoukko
  12. # n = arvontojen lukumäärää
  13. # m = osajoukon koko
  14. # alaraja < tulo < ylaraja
  15. osajoukot = []
  16. b = sort(sample(a,m,replace=false))
  17. tulo = prod(b)
  18. while tulo <= alaraja || tulo >= ylaraja
  19. b = sort(sample(a,m,replace=false)) # tulo rajojen välillä
  20. tulo = prod(b)
  21. end # löydetty eka kelvollinen osajoukko
  22. push!(osajoukot,b) # tallennetaan osajoukko
  23. j = 1 # laskee löydettyjen uniikkien osajoukkojen määrää
  24. for i = 2:n # etsitään loput kelvolliset osajoukot
  25. b = sort(sample(a,m,replace=false))
  26. tulo = prod(b)
  27. while tulo <= alaraja || tulo >= ylaraja
  28. b = sort(sample(a,m,replace=false))
  29. tulo = prod(b)
  30. end # löytyi kelvollinen osajoukko b
  31.  
  32. # katsotaan onko löydetty osajoukko b aiemman duplikaatti
  33. duplicat = false # ei duplikaattia
  34. for k = 1 : j
  35. if b == osajoukot[k]
  36. duplicat = true # on duplikaatti
  37. end
  38. end
  39. if duplicat == false # on uniikki
  40. push!(osajoukot,b) # lisättiin listaan
  41. j += 1 # kirjaa löydettyjen osajoukkojen lukumäärää
  42. end
  43. end
  44. println("löydettyjä osajoukkoja ",j)
  45. return sort(osajoukot)
  46. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement