# Find all permutations with a condition

How can I find all the permutations of {a, b, c} where a + b + c = n?

For instance: if n = 3 the permutations I seel are:

• Permutations[{3, 0, 0}]
• Permutations[{2, 1, 0}]
• {1, 1, 1}
-
Related: (19486) – Mr.Wizard Mar 11 '13 at 6:03
good find @Mr.Wizard ! I searched for ages permutations-related questions but not IntegerPartitions... – Filippo Vitale Mar 11 '13 at 6:49

f[sum_, quant_] :=
Flatten[Permutations /@ IntegerPartitions[sum, {quant}, Range[0, sum]], 1]

f[3, 3] // Column
(*
{3,0,0}
{0,3,0}
{0,0,3}
{2,1,0}
{2,0,1}
{1,2,0}
{1,0,2}
{0,2,1}
{0,1,2}
{1,1,1}
*)

f[4, 2] // Column
(*
{4,0}
{0,4}
{3,1}
{1,3}
{2,2}
*)

-
f[sum_, quant_] := FrobeniusSolve[Array[1 &, quant], sum]

f[3, 3]

(*
{{0, 0, 3}, {0, 1, 2}, {0, 2, 1}, {0, 3, 0}, {1, 0, 2}, {1, 1, 1},
{1, 2, 0}, {2, 0, 1}, {2, 1, 0}, {3, 0, 0}}
*)

f[4, 2]

(* {{0, 4}, {1, 3}, {2, 2}, {3, 1}, {4, 0}} *)

-
For readibility purpose, may I suggest: ConstantArray[1, quant] instead of Array[1 &, quant] ? – Filippo Vitale Mar 11 '13 at 8:49
Of course. And ConstantArray more faster, try ConstantArray[1, 10^7]; // Timing, Array[1 &, 10^7]; // Timing – chyaong Mar 11 '13 at 9:28