Algorytm zastępowania wielu ciągów

0

Witam !
tworze programik, gdzie mam nieokreśloną liczbę "zmiennych" w tekście: np %1%, %2%, %3% itd.
Każda z tych "zmiennych" musi być zastąpiona również nieokreśloną liczbą tyle razy, żeby wyświetliła się każda możliwa kombinacja dla tych "zmiennych".

Powiedzmy, że
%1% ma mieć zakres 1-3
%2% 1-6
%3% 3-6

chcę mieć następujący wynik dla maski "a:%1% b: %2% c: %2%"
a: 1 b: 1 c: 3
a: 2 b: 1 c: 3
a: 3 b: 1 c: 3

a: 1 b: 2 c: 3
a: 1 b: 3 c: 3
a: 1 b: 4 c: 3
a: 1 b: 5 c: 3
a: 1 b: 6 c: 3

a: 1 b: 1 c: 4
a: 1 b: 1 c: 5
a: 1 b: 1 c: 6

a: 2 b: 2 c: 3
a: 2 b: 3 c: 3
a: 2 b: 4 c: 3
a: 2 b: 5 c: 3
a: 2 b: 6 c: 3
(itd)

Dla jednej zmiennej bez problemu napisałem zamianę, niestaty dla większej ilości nie mogę wymyślić algorytmu :( Domyślam się, że jedynym rozwiązaniem jest rekurencja, ale też nie potrafię jej tutaj zastosować :(
Proszę, pomóżcie mi to zapisać (nie proszę o rozwiązanie ale o schemat, sposób rozwiązania)

Pozdrawiam !

0

Dla trzech zmiennych tworzysz trzy pętle zagnieżdżone, a w trzeciej - najgłębszej - wyświetlasz aktualne liczniki tych pętli i w ten sposób otrzymujesz wszystkie wariacje (chyba tak to się nazywało...) dla zadanych wartości.

0
Dannte napisał(a)

Dla trzech zmiennych tworzysz trzy pętle zagnieżdżone, a w trzeciej - najgłębszej - wyświetlasz aktualne liczniki tych pętli i w ten sposób otrzymujesz wszystkie wariacje (chyba tak to się nazywało...) dla zadanych wartości.
Tak, tylko zmiennych może być i 255 :P... Jednak spróbuje skorzystać z tej wskazówki... (btw. nigdy nie korzystałem z rekurencji :/ )

0

Aha racja, nie pomyślałem o tym :P Więc jak liczba zmiennych jest nieznana, to najprościej użyć takich iteracji jak pokazałem +rekurencja:
Napisz prockę, którą wywołasz na początku programu z parametrem n (gdzie n to liczba tych zmiennych). Procka ta z kolei n razy będzie wykonywać samą siebie (pętla for), tyle, że z parametrem n-1. I tak w kółko się będzie zagnieżdżać, aż dojdzie do momentu, że parametr będzie równy 1, wtedy wyświetli aktualne liczniki (niech w dodatku pamięta je w jakiejś tablicy i będzie dobrze).

0

zrobiłem to tak, jak dodaje się w adresie ip: 0.255 + 001 = 001.000, tyle, że każdy oktet ma inny zakres :) Pętla się wykonuje tyle razy, ile jest kombinacji, więc nie dojdzie do przypadku, gdzie będzie 255.255 + 1
po każdym wykonaniu wypisuje cały ciąg wraz ze wstawionymi "zmiennymi"

1 użytkowników online, w tym zalogowanych: 0, gości: 1