I don't see how breaking it into groups of equal amounts of money would result in more than one solution.
You can try a basic greedy algorithm:
function split(%c25, %c10, %c5, %c1, %size)
{
echo("---");
%curr = 0;
%u25 = 0;
%u10 = 0;
%u5 = 0;
%u1 = 0;
while(%c25 > 0 && %curr + 25 <= %size)
{
%c25--;
%u25++;
%curr += 25;
}
while(%c10 > 0 && %curr + 10 <= %size)
{
%c10--;
%u10++;
%curr += 10;
}
while(%c5 > 0 && %curr + 5 <= %size)
{
%c5--;
%u5++;
%curr += 5;
}
while(%c1 > 0 && %curr + 1 <= %size)
{
%c1--;
%u1++;
%curr += 1;
}
if(%size == %curr)
{
echo(%u25 SPC "quarters.");
echo(%u10 SPC "dimes.");
echo(%u5 SPC "nickels.");
echo(%u1 SPC "pennies.");
split(%c25, %c10, %c5, %c1, %size);
}
else
{
echo("Remainder:");
echo(%u25 + %c25 SPC "quarters.");
echo(%u10 + %c10 SPC "dimes.");
echo(%u5 + %c5 SPC "nickels.");
echo(%u1 + %c1 SPC "pennies.");
echo("---");
}
}
Totally untested and written entirely in the quick reply box.