Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using StatsBase
- # ohjelmointikielenä Julia
- # valitaan lukujoukosta a uniikkeja n luvun osajoukkoja
- # Etsitaan ne joukon a osajoukot joiden jäsenten tulot on tietyllä välillä
- # Juhani Kaukoranta 5.6.2023
- a=[22, 70, 75, 5, 39, 54, 52, 13, 98, 18, 45, 73, 39, 17, 64, 31, 94, 93, 69, 5]
- # tai esim a = rand(1:99,50) tuottaa 50 kpl kokonaislukuja väliltä 1...99
- # etsi n kpl m luvun ryhmiä joiden lukujen tulo > tuloraja tai vaihtoehtoisesti tulo < tuloraja
- # joukko on uniikki jos ei ole ehdon täyttävää muuta joukkoa jossa on täsmälleen samat luvut
- function haku(a,n,m,alaraja,ylaraja)
- # a = lukujoukko josta valitaan osajoukko
- # n = arvontojen lukumäärää
- # m = osajoukon koko
- # alaraja < tulo < ylaraja
- osajoukot = []
- b = sort(sample(a,m,replace=false))
- tulo = prod(b)
- while tulo <= alaraja || tulo >= ylaraja
- b = sort(sample(a,m,replace=false)) # tulo rajojen välillä
- tulo = prod(b)
- end # löydetty eka kelvollinen osajoukko
- push!(osajoukot,b) # tallennetaan osajoukko
- j = 1 # laskee löydettyjen uniikkien osajoukkojen määrää
- for i = 2:n # etsitään loput kelvolliset osajoukot
- b = sort(sample(a,m,replace=false))
- tulo = prod(b)
- while tulo <= alaraja || tulo >= ylaraja
- b = sort(sample(a,m,replace=false))
- tulo = prod(b)
- end # löytyi kelvollinen osajoukko b
- # katsotaan onko löydetty osajoukko b aiemman duplikaatti
- duplicat = false # ei duplikaattia
- for k = 1 : j
- if b == osajoukot[k]
- duplicat = true # on duplikaatti
- end
- end
- if duplicat == false # on uniikki
- push!(osajoukot,b) # lisättiin listaan
- j += 1 # kirjaa löydettyjen osajoukkojen lukumäärää
- end
- end
- println("löydettyjä osajoukkoja ",j)
- return sort(osajoukot)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement