Jak się przyjrzysz temu problemowi, to on się sprowadza do tego, jak wybrać dokładnie n elementów z k elementów, gdzie n to długość pierwszej liczby, a k to suma długości obu liczb. Wtedy na tych wybranych miejscach wypisujesz kolejno cyfry pierwszej liczby, a na pozostałych — cyfry drugiej liczby. Przykładowo, jak mamy te liczby z zadania: 42 i 153, to n to dwa, a k to pięć.
Przyjmując oznaczenie takie, że 1
oznacza pole na cyfrę pierwszej liczby, a 0
oznacza pole na cyfrę drugiej liczby, generujemy sobie k cyfrowe liczby binarne z n jedynkami, np. tak jak tutaj: https://stackoverflow.com/questions/1851134/generate-all-binary-strings-of-length-n-with-k-bits-set
A jak już to mamy, to pozostaje punkt czwarty, czyli przypisywanie kolejnych cyfr na kolejne pola (pokazałem krok po kroku, tzn. zapis miejsc, powstawiane cyfry pierwszej liczby a drugie zapisane jako _
, powstawiane wszystko):
11000 → 42___ → 42153
10100 → 4_2__ → 41253
10010 → 4__2_ → 41523
itd.