Rind
Dołączył: 24 Wrz 2010 Posty: 74
Przeczytał: 0 tematów
Pomógł: 3 razy Ostrzeżeń: 0/5
|
Wysłany: Pon 10:45, 23 Maj 2011 Temat postu: |
|
|
Wszystkie moje:
a) Ciągi długości "K" rekurencyjnie
Kod: |
def start(n, k)
@n = n.to_i
@k = k.to_i
@t = -1
@x = []
@k.times do
@x << 0
end
gen(@n, @k)
end
def gen(n, k)
@t += 1
1.upto(n) do |i|
@x[@t] = i
if @t == k - 1
p @x
else
gen(@n, @k)
end
end
@t -= 1
end
start(ARGV[0], ARGV[1])
|
b) Ciągi długości K z liczb N, w których i-ty wyraz jest <= i
Kod: |
def start(n, k)
@n = n.to_i
@k = k.to_i
@t = -1
@x = []
@k.times do
@x << 0
end
gen(@n, @k)
end
def gen(n, k)
@t += 1
1.upto(@t + 1) do |i|
@x[@t] = i
if @t == k - 1
p @x
else
gen(@n, @k)
end
end
@t -= 1
end
start(ARGV[0], ARGV[1])
|
c) Generowanie ciągów dł 'k' ze zbioru (1..n) iteracyjnie, antyleksykograficznie
Kod: |
def ciag(n, k)
# konwersja String -> Integer
n = n.to_i
k = k.to_i
# generujemy tablice o dlugosci k, skladajaca sie z samych jedynek
tab = []
k.times do
tab << 1
end
# wykonuje petle
loop do
# drukuje aktualna tablice
p tab
index = 0
while index < k && tab[index] == n
tab[index] = 1
index += 1
end
if index >= k
return
else
tab[index] += 1
end
end
end
ciag(ARGV[0], ARGV[1])
|
d) Generowanie k-elementowych podzbiorów
Kod: |
def podzbiory(k, n)
k = k.to_i
n = n.to_i
tab = []
## pierwszy element jest podzbiorem [1, 2, ..., k]
k.times do |i|
tab << i + 1
end
## najwiekszy element na pozycji 'i'-tej wynosi (n - k + 1)
## znajdz 1-sza pozycje t[i] od prawej strony NIEzawierajacej najwiekszego mozliwego elementu
## zwieksz t[i] = 1
## przypisz elementom lezacym na prawo od t[i] (t[i+1] + 1, t[i + 2] + t[i + 1] + 1 itp)
loop do
znaleziony = -1
p tab
index = k - 1
index.downto(0) do |i|
najwiekszy = n - k + (i + 1)
if najwiekszy != tab[i]
znaleziony = i
break
end
end
if znaleziony == -1
break
end
tab[znaleziony] += 1
(znaleziony + 1).upto(k - 1) do |j|
tab[j] = tab[znaleziony] + (j - znaleziony)
end
end
end
podzbiory(ARGV[0], ARGV[1])
|
Wiem, że już dawno po zajęciach, ale może komuś się przyda
Post został pochwalony 0 razy
|
|