Czy wie może ktoś czy istnieje sposób wygenerowania wszystkich permutacji kwadratu, który ma np. 4 pola i suma ma być np.15. Chodzi mi by wypisać wszystkie możliwe kombinacje jakie możemy wpisać w te pola by uzyskać sumę 15.
Jemu chodzi o magiczny kwadrat ;] tzn np. o:
9 6
6 9
suma pionowo i poziomo wynosi 15
Istnieje sposób. Najłatwiej za pomocą constraint programmingu.
Widzę że bez rekurencji się nie obejdzie jeśli liczba kwadratów jest zmienna jak i suma. Tylko że nie wiem jak to rozwiązanie będzie działać np. dla 100 kwadratów(złożoność o ZGROZA n^100). Nie wiem czy dobrze rozumiecie mój problem. Podam jaśniejszy przykład
Wejście : 8 4
Wyjście :
5 1 1 1
4 2 1 1
3 3 1 1
2 2 2 2
3 2 2 1
3 3 1 1
3 2 2 1
(*to chyba wszystkie)
Nie ma szybszego sposobu by to wygenerować nie korzystając z poczwórnej pętli ?
Rozumiem że w ogóle pominąłeś posty które pokazywały jak się uzywa constraint programmingu? o_O
Spojrzałem teraz na przykład z tej strony i jest trochę niezrozumiały ;)
proc {Money Root}
S E N D M O R Y
in
Root = sol(s:S e:E n:N d:D m:M o:O r:R y:Y) % 1
Root ::: 0#9 % 2
{FD.distinct Root} % 3
S \=: 0 % 4
M \=: 0
1000*S + 100*E + 10*N + D % 5
+ 1000*M + 100*O + 10*R + E
=: 10000*M + 1000*O + 100*N + 10*E + Y
{FD.distribute ff Root}
end
Kurdę, nie ma nic w c++. A da się to zrobić rekurencją ?